Index: JvAppRegistryStorage.pas
===================================================================
--- JvAppRegistryStorage.pas	(revision 14328)
+++ JvAppRegistryStorage.pas	(working copy)
@@ -1,4 +1,4 @@
-{-----------------------------------------------------------------------------
+﻿{-----------------------------------------------------------------------------
 The contents of this file are subject to the Mozilla Public License
 Version 1.1 (the "License"); you may not use this file except in compliance
 with the License. You may obtain a copy of the License at
@@ -85,6 +85,7 @@
     FCompanyNameErrorHandled: Boolean;
     function GetStorageOptions: TJvAppRegistryStorageOptions;
     procedure SetStorageOptions(const Value: TJvAppRegistryStorageOptions);
+    function Store_Root : boolean;  //!
   protected
     procedure Loaded; override;
 
@@ -125,7 +126,7 @@
     constructor Create(AOwner: TComponent); override;
   published
     property RegRoot: TJvRegKey read GetRegRoot write SetRegRoot default hkCurrentUser;
-    property Root read GetRoot write SetRoot;
+    property Root read GetRoot write SetRoot stored Store_Root;  //!
     property SubStorages;
     property FlushOnDestroy;
     property UseOldDefaultRoot: Boolean read FUseOldDefaultRoot write SetUseOldDefaultRoot stored True default False ;
@@ -182,7 +183,7 @@
 begin
   inherited Create(AOwner);
   FRegHKEY := HKEY_CURRENT_USER;
-  FUseOldDefaultRoot := False;
+  UseOldDefaultRoot := True; //! False;
   FAppNameErrorHandled := False;
   FCompanyNameErrorHandled := False;
 end;
@@ -573,6 +574,12 @@
   (Inherited StorageOptions).Assign(Value);
 end;
 
+//! Don't store root if default path should be used anyway
+function TJvAppRegistryStorage.Store_Root : boolean;
+begin
+     result:=not FUseOldDefaultRoot;
+end;
+
 {$IFDEF UNITVERSIONING}
 initialization
   RegisterUnitVersion(HInstance, UnitVersioning);
Index: JvAppStorage.pas
===================================================================
--- JvAppStorage.pas	(revision 14328)
+++ JvAppStorage.pas	(working copy)
@@ -959,6 +959,8 @@
     );
 {$ENDIF UNITVERSIONING}
 
+var DefaultAppStorage : TJvCustomAppStorage;  //!
+
 implementation
 
 uses
@@ -1296,10 +1298,13 @@
   FReadOnly := False;
   FInternalTranslateStringEngine := TJvTranslateString.Create(Self);
   FSynchronizeFlushReload := False;
+  DefaultAppStorage:=self;  //!
 end;
 
 destructor TJvCustomAppStorage.Destroy;
 begin
+  if DefaultAppStorage=self then //!
+     DefaultAppStorage:=nil;     //!
   if FlushOnDestroy then
     Flush;
   FreeAndNil(FInternalTranslateStringEngine);
Index: JvFormPlacement.pas
===================================================================
--- JvFormPlacement.pas	(revision 14328)
+++ JvFormPlacement.pas	(working copy)
@@ -111,6 +111,7 @@
     procedure FormDestroy(Sender: TObject);
     function GetForm: TForm;
     procedure SetAppStorage(const Value: TJvCustomAppStorage);
+    function Store_AppStorePath : boolean; //!
   protected
     procedure ResolveAppStoragePath;
     procedure Loaded; override;
@@ -141,7 +142,7 @@
   published
     property Active: Boolean read FActive write FActive default True;
     property AppStorage: TJvCustomAppStorage read FAppStorage write SetAppStorage;
-    property AppStoragePath: string read FAppStoragePath write SetAppStoragePath;
+    property AppStoragePath: string read FAppStoragePath write SetAppStoragePath stored Store_AppStorePath;    //!
     property MinMaxInfo: TJvWinMinMaxInfo read FWinMinMaxInfo write SetWinMinMaxInfo;
     property Options: TPlacementOptions read FOptions write FOptions default [fpState, fpSize, fpLocation];
     property PreventResize: Boolean read FPreventResize write SetPreventResize default False;
@@ -291,6 +292,10 @@
 uses
   Consts,
   JclStrings,
+{$DEFINE CreateRegAppStorageOnDemand}  //! If not AppStorage is defined create a TJvAppRegistryStorage as default storage
+{$IFDEF CreateRegAppStorageOnDemand}
+  JvAppRegistryStorage,
+{$ENDIF}
   JvJCLUtils, JvPropertyStorage;
 
 const
@@ -345,6 +350,17 @@
   inherited Loaded;
   if not (csDesigning in ComponentState) then
   begin
+    //! Make use of FormStorage simpler
+    if not assigned(FAppStorage) then
+    begin
+{$IFDEF CreateRegAppStorageOnDemand}
+         if not assigned(DefaultAppStorage) then
+            AppStorage:=TJvAppRegistryStorage.Create(Owner);
+{$ENDIF}
+         if assigned(DefaultAppStorage) then
+            AppStorage:=DefaultAppStorage;
+    end;
+
     ResolveAppStoragePath;
     if Loading then
       SetEvents;
@@ -1357,6 +1373,12 @@
   ReplaceComponentReference(Self, Value, TComponent(FAppStorage));
 end;
 
+//! reduce footprint in dfm: Don't store path if it was not modified
+function TJvFormPlacement.Store_AppStorePath : boolean;
+begin
+  result:=(FAppStoragePath<>cFormNameMask+'\') and (FAppStoragePath<>cFormNameMask);
+end;
+
 { TJvFormStorageStringList }
 
 procedure TJvFormStorageStringList.Assign(Source: TPersistent);
Index: JvJVCLUtils.pas
===================================================================
--- JvJVCLUtils.pas	(revision 14328)
+++ JvJVCLUtils.pas	(working copy)
@@ -3908,8 +3908,13 @@
 
 function CrtResString: string;
 begin
-  Result := Format('(%dx%d)', [GetSystemMetrics(SM_CXSCREEN),
-    GetSystemMetrics(SM_CYSCREEN)]);
+//!  Result := Format('(%dx%d)', [GetSystemMetrics(SM_CXSCREEN),
+//!    GetSystemMetrics(SM_CYSCREEN)]);
+
+//! New Resolution Identifier, because old method did not work
+//    properly for Multi-screen systems (returned only width/height of current screen)
+  Result := Format( '(%dx%d)',
+                    [Screen.DesktopWidth, Screen.DesktopHeight]);
 end;
 
 function ReadPosStr(AppStorage: TJvCustomAppStorage; const Path: string): string;
@@ -4146,13 +4151,12 @@
       PostMessage(Application.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
       Exit;
     end;
-    {$IFNDEF DELPHI2010_UP} // Using this Hack didn't work with D2010
+    {$IFNDEF DELPHI2010_UP} //! Using this Hack didn't work with D2010
     if Form.FormStyle in [fsMDIChild, fsMDIForm] then
       TWindowState(Pointer(@Form.WindowState)^) := WinState
     else
-    {$ELSE}
+    {$ENDIF}
       Form.WindowState := WinState;
-    {$ENDIF}
   end;
   Form.Update;
 end;
