diff --git a/Source/MainWindow.cpp b/Source/MainWindow.cpp
index c7e5165502193386d4f98134af6eff2a98c4bc14..ee6faa7a3ff41a90848b84f1794ac78703e6898f 100644
--- a/Source/MainWindow.cpp
+++ b/Source/MainWindow.cpp
@@ -35,7 +35,7 @@ MainWindow::MainWindow()
     setResizable(true,      // isResizable
                  false);   // useBottomCornerRisizer -- doesn't work very well
 
-   
+    shouldReloadOnStartup = false;
 
     // Create ProcessorGraph and AudioComponent, and connect them.
     // Callbacks will be set by the play button in the control panel
@@ -70,6 +70,17 @@ MainWindow::MainWindow()
      // Constraining the window's size doesn't seem to work:
     setResizeLimits(300, 200, 10000, 10000);
 
+    if (shouldReloadOnStartup)
+    {
+        File executable = File::getSpecialLocation(File::currentExecutableFile);
+        File executableDirectory = executable.getParentDirectory();
+        File file = executableDirectory.getChildFile("lastConfig.xml");
+
+        ui->getEditorViewport()->loadState(file);
+    }
+        
+    
+
 }
 
 MainWindow::~MainWindow()
@@ -87,6 +98,12 @@ MainWindow::~MainWindow()
     UIComponent* ui = (UIComponent*) getContentComponent();
     ui->disableDataViewport();
 
+    File executable = File::getSpecialLocation(File::currentExecutableFile);
+    File executableDirectory = executable.getParentDirectory();
+    File file = executableDirectory.getChildFile("lastConfig.xml");
+
+    ui->getEditorViewport()->saveState(file);
+
     setMenuBar(0);
 
 #if JUCE_MAC
@@ -121,6 +138,7 @@ void MainWindow::saveWindowBounds()
     XmlElement* xml = new XmlElement("MAINWINDOW");
 
     xml->setAttribute("version", JUCEApplication::getInstance()->getApplicationVersion());
+    xml->setAttribute("shouldReloadOnStartup", shouldReloadOnStartup);
 
     XmlElement* bounds = new XmlElement("BOUNDS");
     bounds->setAttribute("x",getScreenX());
@@ -183,6 +201,8 @@ void MainWindow::loadWindowBounds()
 
         String description;
 
+        shouldReloadOnStartup = xml->getBoolAttribute("shouldReloadOnStartup", false);
+
         forEachXmlChildElement(*xml, e)
         {
 
diff --git a/Source/MainWindow.h b/Source/MainWindow.h
index 7592b0432c4c062d255a7804bf2b1b2a79858a52..82b4af6be0762e2fb6c98e166cddfd6b9caa5c51 100644
--- a/Source/MainWindow.h
+++ b/Source/MainWindow.h
@@ -59,6 +59,9 @@ public:
         commands. */
     ApplicationCommandManager commandManager;
 
+    /** Determines whether the last used configuration reloads upon startup. */
+    bool shouldReloadOnStartup;
+
 private:
 
     /** Saves the MainWindow's boundaries into the file "windowState.xml", located in the directory
@@ -75,6 +78,8 @@ private:
     /** A pointer to the application's ProcessorGraph (owned by the MainWindow). */
     ScopedPointer<ProcessorGraph> processorGraph;
 
+
+
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainWindow)
 
 };
diff --git a/Source/UI/UIComponent.cpp b/Source/UI/UIComponent.cpp
index bb8d55487fd6a9a9ebce79301ca542a09437ba90..837bfc5f7bc380977065a6fd22e4cfd4c57b9973 100755
--- a/Source/UI/UIComponent.cpp
+++ b/Source/UI/UIComponent.cpp
@@ -300,6 +300,8 @@ PopupMenu UIComponent::getMenuForIndex(int menuIndex, const String& menuName)
     {
         menu.addCommandItem(commandManager, openConfiguration);
         menu.addCommandItem(commandManager, saveConfiguration);
+        menu.addSeparator();
+        menu.addCommandItem(commandManager, reloadOnStartup);
 
 #if !JUCE_MAC
         menu.addSeparator();
@@ -356,6 +358,7 @@ void UIComponent::getAllCommands(Array <CommandID>& commands)
 {
     const CommandID ids[] = {openConfiguration,
                              saveConfiguration,
+                             reloadOnStartup,
                              undo,
                              redo,
                              copySignalChain,
@@ -388,7 +391,12 @@ void UIComponent::getCommandInfo(CommandID commandID, ApplicationCommandInfo& re
         case saveConfiguration:
             result.setInfo("Save configuration", "Save the current processor graph.", "General", 0);
             result.addDefaultKeypress('S', ModifierKeys::commandModifier);
+            break;
+
+        case reloadOnStartup:
+            result.setInfo("Reload on startup", "Load the last used configuration on startup.", "General", 0);
             result.setActive(!acquisitionStarted);
+            result.setTicked(mainWindow->shouldReloadOnStartup);
             break;
 
         case undo:
@@ -499,6 +507,14 @@ bool UIComponent::perform(const InvocationInfo& info)
 
                 break;
             }
+
+        case reloadOnStartup:
+            {
+                mainWindow->shouldReloadOnStartup = !mainWindow->shouldReloadOnStartup;
+
+            }
+            break;
+
         case clearSignalChain:
         {
             getEditorViewport()->clearSignalChain();
diff --git a/Source/UI/UIComponent.h b/Source/UI/UIComponent.h
index a8e5e5637ce85bd3bf3bee1547234d7240cb04a0..8b7cd06057c200673c23bcac043fc350ed8d5041 100755
--- a/Source/UI/UIComponent.h
+++ b/Source/UI/UIComponent.h
@@ -206,7 +206,8 @@ private:
         toggleSignalChain	    = 0x2009,
         toggleFileInfo			= 0x2010,
         showHelp				= 0x2011,
-        resizeWindow            = 0x2012
+        resizeWindow            = 0x2012,
+        reloadOnStartup         = 0x2013
     };
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UIComponent);