diff --git a/pub/src/commands.cpp b/pub/src/commands.cpp
index f4248227106b405386634d0e7a7195bb71ad77cb..42b1a4bab06f3a1f2a9f84792ef227818f135e37 100644
--- a/pub/src/commands.cpp
+++ b/pub/src/commands.cpp
@@ -92,14 +92,15 @@ bool fridaCommand( string cmd )
 
     } else if (cmd == "b") {
         cout << "Backup commands:\n"
+            "  bc   copy to online backup (automatically before cf)\n"
             "  br   retrieved from online backup\n"
-            "  bs   copy to online backup (automatically before cf)\n";
+            ;
 
-    } else if (cmd == "br") {
-        NOlm::mem_retrieve();
+    } else if (cmd == "bc") {
+        NOlm::mem_backup_store();
 
-    } else if (cmd == "bs") {
-        NOlm::mem_backup();
+    } else if (cmd == "br") {
+        NOlm::mem_backup_retrieve();
 
     } else if (cmd == "c") {
         cout << "Curve and fit commands:\n"
diff --git a/pub/src/curve.cpp b/pub/src/curve.cpp
index 2abb9f7a1fcad407b3d5a11e697f44db15de5d32..13d3dffab740316f9f88db6cb618a38199b35663 100644
--- a/pub/src/curve.cpp
+++ b/pub/src/curve.cpp
@@ -836,6 +836,7 @@ void NCurveFile::Fit( bool _allow_slow_conv )
     FitDatTyp data;
     allow_slow_conv = _allow_slow_conv;
 
+    NOlm::mem_backup_store();
     NOlm::IterateC fiter;
 
     while ( POlc fc = fiter() ) {
diff --git a/pub/src/mem.cpp b/pub/src/mem.cpp
index 94abd93fcda2f9b24f7e473e84935b3446cc86ee..fd22dc3eab2c7ac32617f8481e916533e490fdbb 100644
--- a/pub/src/mem.cpp
+++ b/pub/src/mem.cpp
@@ -24,6 +24,7 @@
 
 namespace NOlm {
     vector<POlo> MOM;
+    vector<POlo> BAK;
     bool overwrite;
     CList FSel, FSelOld, FSelNew;
 };
@@ -325,15 +326,29 @@ namespace NOlm {
 namespace NOlm {
 
     //! Copy selected files to backup.
-    void mem_backup()
+
+    void mem_backup_store()
     {
-        throw "not yet implemented";
+        BAK.clear();
+        IterateO fiter;
+        while ( POlo fin=fiter() ){
+            POlo fout( fin->new_olo( false ) );
+            fout->copy_mainvec( fin );
+            BAK.push_back( fout );
+        }
     }
 
     //! Retrieve files from backup.
 
-    void mem_retrieve()
+    void mem_backup_retrieve()
     {
-        throw "not yet implemented";
+        if( !BAK.size() )
+            throw "no files in backup";
+        sel_collect_begin();
+        for( uint kb=0; kb<BAK.size(); ++kb ){
+            mem_store( BAK[kb], -1 );
+        }
+        sel_collect_end();
+        BAK.clear();
     }
 }
diff --git a/pub/src/mem.h b/pub/src/mem.h
index 21a727173d2060c92683396edc13a749b062d7e1..5a351e4dc2e4fe1b2f2ebc4b6384ee207f22961c 100644
--- a/pub/src/mem.h
+++ b/pub/src/mem.h
@@ -38,8 +38,8 @@ namespace NOlm {
     void sel_increment( int step );
 
     // Backup:
-    void mem_backup();
-    void mem_retrieve();
+    void mem_backup_store();
+    void mem_backup_retrieve();
 
     //! Iterate over all files in selection.
     class IterateO {