SET(CMAKE_BUILD_TYPE Release)
 
 add_library(o815 o815.cpp obs.cpp sim.cpp)
-target_link_libraries(o815 ${MPI_LIBRARIES} lat_paraq lat_writeout lat_hypercache lat_progress)
+target_link_libraries(o815 ${MPI_LIBRARIES} lat_paraq lat_writeout lat_hypercache lat_progress lat_datread)
 if(DEFINED ENV{MPI_DISABLED})
   set_target_properties(o815 PROPERTIES COMPILE_DEFINITIONS "MPI_DISABLED")
 endif()
 
   class sim {
   public:
     sim(o815 *_O815, const int& _confmemSize);
+    ~sim ();
     void nextConfig();
     char *confMem;
     virtual void _newParas()=0;
-    virtual void _resetConfig()=0;
     int nequi, nskip;
+    void resetConfig();
   private:
     virtual void _makeSweep()=0;
+    virtual void _resetConfig()=0;
+    char *startConfiguration;
   protected:
     o815 *O815;
     ostream *log;
 
 #include "latlib/hypercache.h"
 #include "latlib/progress.h"
 
+#include "latlib/datread.h"
+
 o815::sim::sim(o815 *_O815, const int& _confmemSize) {
   O815 = _O815;
   log = O815->out->log;
   nequi = O815->comargs.nequi;
   nskip = O815->comargs.nskip;
   confmemSize = confmemSize;
+
+  startConfiguration = NULL;
+  
+  if ( O815->comargs.startconfig != "" ) {
+    *log << "SIM: Fetching startconfig from " << O815->comargs.startconfig << endl;
+    
+    datread dataReader(confmemSize);
+    dataReader.openFile(O815->comargs.startconfig);
+    
+    if ( dataReader.fisopen() ) {
+      startConfiguration = new char[confmemSize];
+      
+      if ( dataReader.readFullBlock(startConfiguration) < 0 ) {
+       *log << "SIM: Error while reading config from " << O815->comargs.startconfig << endl;
+       delete[] startConfiguration;
+       startConfiguration = NULL;
+      }     
+    }
+    else {
+      *log << "SIM: Could not open startconfigfile " << O815->comargs.startconfig << endl;
+    }
+  }
+  
+}
+
+o815::sim::~sim ()
+{
+  if (startConfiguration != NULL)
+    delete[] startConfiguration;
 }
 
 void o815::sim::nextConfig() {
     hypercache::writeC();
   }
 }
+
+void o815::sim::resetConfig() {
+  if ( startConfiguration != NULL )
+    memcpy(confMem, startConfiguration, confmemSize);
+  else
+    _resetConfig();
+}