Index: /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 13884)
@@ -224,5 +224,7 @@
   </ItemGroup>
   <ItemGroup>
-    <None Include="app.config" />
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
     <EmbeddedResource Include="Documents\FirstSteps.rtf" />
     <None Include="HeuristicLab.snk" />
Index: /stable/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 13884)
@@ -80,6 +80,4 @@
         startPage.Show();
       }
-
-      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
     }
 
@@ -93,5 +91,4 @@
     protected override void OnClosed(EventArgs e) {
       base.OnClosed(e);
-      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
       Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
       OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
Index: /stable/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 13884)
@@ -80,6 +80,4 @@
         startPage.Show();
       }
-
-      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
     }
 
@@ -93,5 +91,4 @@
     protected override void OnClosed(EventArgs e) {
       base.OnClosed(e);
-      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
       Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
       OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
Index: /stable/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 13884)
@@ -80,6 +80,4 @@
         startPage.Show();
       }
-
-      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
     }
 
@@ -93,5 +91,4 @@
     protected override void OnClosed(EventArgs e) {
       base.OnClosed(e);
-      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
       Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
       OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
Index: /stable/HeuristicLab.Optimizer/3.3/Plugin.cs.frame
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 13884)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Drawing;
 using System.Linq;
 using System.Windows.Forms;
@@ -61,4 +62,23 @@
 
       if (mainForm != null) {
+        if (CheckSavedMainFormSettings()) {
+          mainForm.Location = Settings.Default.MainFormLocation;
+          mainForm.Size = Settings.Default.MainFormSize;
+          mainForm.WindowState = Settings.Default.MainFormWindowState;
+        }
+
+        mainForm.FormClosing += (sender, eventArgs) => {
+          if (mainForm.WindowState != FormWindowState.Minimized)
+            Settings.Default.MainFormWindowState = mainForm.WindowState;
+          if (mainForm.WindowState != FormWindowState.Normal) {
+            Settings.Default.MainFormLocation = mainForm.RestoreBounds.Location;
+            Settings.Default.MainFormSize = mainForm.RestoreBounds.Size;
+          } else if (mainForm.WindowState == FormWindowState.Normal) {
+            Settings.Default.MainFormLocation = mainForm.Location;
+            Settings.Default.MainFormSize = mainForm.Size;
+          }
+        };
+
+
         ClientInformation.InitializeAsync();
         UserInformation.InitializeAsync();
@@ -72,4 +92,12 @@
       }
     }
+
+    private bool CheckSavedMainFormSettings() {
+      var formArea = new Rectangle(Settings.Default.MainFormLocation, Settings.Default.MainFormSize);
+      var screenArea = Screen.FromRectangle(formArea).WorkingArea;
+      var overlappingArea = Rectangle.Intersect(formArea, screenArea);
+      bool offLimits = overlappingArea.IsEmpty || overlappingArea.Width * overlappingArea.Height < formArea.Width * formArea.Height * 0.25;
+      return !formArea.IsEmpty && !offLimits;
+    }
   }
 }
Index: /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs	(revision 13884)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.34014
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -13,5 +13,5 @@
     
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
     internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
         
@@ -63,16 +63,4 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.DefaultSettingValueAttribute("True")]
-        public bool ShowMaximized {
-            get {
-                return ((bool)(this["ShowMaximized"]));
-            }
-            set {
-                this["ShowMaximized"] = value;
-            }
-        }
-        
-        [global::System.Configuration.UserScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("True")]
         public bool CollapseClipboard {
             get {
@@ -107,4 +95,40 @@
             }
         }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
+        public global::System.Drawing.Point MainFormLocation {
+            get {
+                return ((global::System.Drawing.Point)(this["MainFormLocation"]));
+            }
+            set {
+                this["MainFormLocation"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
+        public global::System.Drawing.Size MainFormSize {
+            get {
+                return ((global::System.Drawing.Size)(this["MainFormSize"]));
+            }
+            set {
+                this["MainFormSize"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Normal")]
+        public global::System.Windows.Forms.FormWindowState MainFormWindowState {
+            get {
+                return ((global::System.Windows.Forms.FormWindowState)(this["MainFormWindowState"]));
+            }
+            set {
+                this["MainFormWindowState"] = value;
+            }
+        }
     }
 }
Index: /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.settings
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.settings	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/Properties/Settings.settings	(revision 13884)
@@ -12,7 +12,4 @@
       <Value Profile="(Default)">True</Value>
     </Setting>
-    <Setting Name="ShowMaximized" Type="System.Boolean" Scope="User">
-      <Value Profile="(Default)">True</Value>
-    </Setting>
     <Setting Name="CollapseClipboard" Type="System.Boolean" Scope="User">
       <Value Profile="(Default)">True</Value>
@@ -24,4 +21,13 @@
       <Value Profile="(Default)">DockingMainForm</Value>
     </Setting>
+    <Setting Name="MainFormLocation" Type="System.Drawing.Point" Scope="User">
+      <Value Profile="(Default)">0, 0</Value>
+    </Setting>
+    <Setting Name="MainFormSize" Type="System.Drawing.Size" Scope="User">
+      <Value Profile="(Default)">0, 0</Value>
+    </Setting>
+    <Setting Name="MainFormWindowState" Type="System.Windows.Forms.FormWindowState" Scope="User">
+      <Value Profile="(Default)">Normal</Value>
+    </Setting>
   </Settings>
 </SettingsFile>
Index: /stable/HeuristicLab.Optimizer/3.3/app.config
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/app.config	(revision 13883)
+++ /stable/HeuristicLab.Optimizer/3.3/app.config	(revision 13884)
@@ -17,7 +17,4 @@
                 <value>True</value>
             </setting>
-            <setting name="ShowMaximized" serializeAs="String">
-                <value>True</value>
-            </setting>
             <setting name="CollapseClipboard" serializeAs="String">
                 <value>True</value>
@@ -29,4 +26,13 @@
                 <value>DockingMainForm</value>
             </setting>
+            <setting name="MainFormLocation" serializeAs="String">
+                <value>0, 0</value>
+            </setting>
+            <setting name="MainFormSize" serializeAs="String">
+                <value>0, 0</value>
+            </setting>
+            <setting name="MainFormWindowState" serializeAs="String">
+                <value>Normal</value>
+            </setting>
         </HeuristicLab.Optimizer.Properties.Settings>
     </userSettings>
Index: /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.Designer.cs
===================================================================
--- /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.Designer.cs	(revision 13883)
+++ /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.Designer.cs	(revision 13884)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.34014
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -13,5 +13,5 @@
     
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
     public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
         
@@ -83,4 +83,40 @@
             }
         }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
+        public global::System.Drawing.Point StarterFormLocation {
+            get {
+                return ((global::System.Drawing.Point)(this["StarterFormLocation"]));
+            }
+            set {
+                this["StarterFormLocation"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
+        public global::System.Drawing.Size StarterFormSize {
+            get {
+                return ((global::System.Drawing.Size)(this["StarterFormSize"]));
+            }
+            set {
+                this["StarterFormSize"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Normal")]
+        public global::System.Windows.Forms.FormWindowState StarterFormWindowState {
+            get {
+                return ((global::System.Windows.Forms.FormWindowState)(this["StarterFormWindowState"]));
+            }
+            set {
+                this["StarterFormWindowState"] = value;
+            }
+        }
     }
 }
Index: /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.settings
===================================================================
--- /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.settings	(revision 13883)
+++ /stable/HeuristicLab.PluginInfrastructure/3.3/Properties/Settings.settings	(revision 13884)
@@ -18,4 +18,13 @@
       <Value Profile="(Default)">http://services.heuristiclab.com/Deployment-3.3/AdminService.svc</Value>
     </Setting>
+    <Setting Name="StarterFormLocation" Type="System.Drawing.Point" Scope="User">
+      <Value Profile="(Default)">0, 0</Value>
+    </Setting>
+    <Setting Name="StarterFormSize" Type="System.Drawing.Size" Scope="User">
+      <Value Profile="(Default)">0, 0</Value>
+    </Setting>
+    <Setting Name="StarterFormWindowState" Type="System.Windows.Forms.FormWindowState" Scope="User">
+      <Value Profile="(Default)">Normal</Value>
+    </Setting>
   </Settings>
 </SettingsFile>
Index: /stable/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs
===================================================================
--- /stable/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 13883)
+++ /stable/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 13884)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.IO;
 using System.Linq;
@@ -29,4 +30,5 @@
 using HeuristicLab.PluginInfrastructure.Advanced;
 using HeuristicLab.PluginInfrastructure.Manager;
+using HeuristicLab.PluginInfrastructure.Properties;
 
 namespace HeuristicLab.PluginInfrastructure.Starter {
@@ -67,4 +69,10 @@
       splashScreen.Show(this, "Loading HeuristicLab...");
 
+      if (CheckSavedStarterFormSettings()) {
+        Location = Settings.Default.StarterFormLocation;
+        Size = Settings.Default.StarterFormSize;
+        WindowState = Settings.Default.StarterFormWindowState;
+      }
+
       pluginManager.DiscoverAndCheckPlugins();
       UpdateApplicationsList();
@@ -96,4 +104,16 @@
       splashScreen.Close();
       abortRequested = true;
+
+      if (WindowState != FormWindowState.Minimized)
+        Settings.Default.StarterFormWindowState = WindowState;
+      if (WindowState != FormWindowState.Normal) {
+        Settings.Default.StarterFormLocation = RestoreBounds.Location;
+        Settings.Default.StarterFormSize = RestoreBounds.Size;
+      } else if (WindowState == FormWindowState.Normal) {
+        Settings.Default.StarterFormLocation = Location;
+        Settings.Default.StarterFormSize = Size;
+      }
+
+      Settings.Default.Save();
     }
 
@@ -177,4 +197,12 @@
 
     #region Helpers
+    private bool CheckSavedStarterFormSettings() {
+      var formArea = new Rectangle(Settings.Default.StarterFormLocation, Settings.Default.StarterFormSize);
+      var screenArea = Screen.FromRectangle(formArea).WorkingArea;
+      var overlappingArea = Rectangle.Intersect(formArea, screenArea);
+      bool offLimits = overlappingArea.IsEmpty || overlappingArea.Width * overlappingArea.Height < formArea.Width * formArea.Height * 0.25;
+      return !formArea.IsEmpty && !offLimits;
+    }
+
     private void UpdateApplicationsList() {
       if (InvokeRequired) Invoke((Action)UpdateApplicationsList);
Index: /stable/HeuristicLab.PluginInfrastructure/3.3/app.config
===================================================================
--- /stable/HeuristicLab.PluginInfrastructure/3.3/app.config	(revision 13883)
+++ /stable/HeuristicLab.PluginInfrastructure/3.3/app.config	(revision 13884)
@@ -23,4 +23,13 @@
       <setting name="UpdateLocationAdministrationAddress" serializeAs="String">
         <value>http://services.heuristiclab.com/Deployment-3.3/AdminService.svc</value>
+      </setting>
+      <setting name="StarterFormLocation" serializeAs="String">
+        <value>0, 0</value>
+      </setting>
+      <setting name="StarterFormSize" serializeAs="String">
+        <value>0, 0</value>
+      </setting>
+      <setting name="StarterFormWindowState" serializeAs="String">
+        <value>Normal</value>
       </setting>
     </HeuristicLab.PluginInfrastructure.Properties.Settings>
