diff --git a/pub/lib/curve.cpp b/pub/lib/curve.cpp
index 4830a65dd80772dfb16c603396be1592fa9db09e..0b27b7cb056b2f42eff69c6625160a7af529b67e 100644
--- a/pub/lib/curve.cpp
+++ b/pub/lib/curve.cpp
@@ -37,7 +37,7 @@ using boost::format;
 
 void NCurveFile::create_fitcurve()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
 
     POlc fc( new COlc );
     fc->curve_query( "Curve definition" );
@@ -101,7 +101,7 @@ void NCurveFile::change_expr()
     POlc ftmp( new COlc );
     ftmp->curve_query( "Replace curve definition by" );
 
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     while( POlc fc = fiter.getC() ) {
         int nPold = fc->nP;
@@ -129,7 +129,7 @@ void NCurveFile::set_file_reference( const string& which )
 //         "v"  set convolution file
 //         "v-" switch convolution off
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     string expr;
     RNode T;
@@ -177,7 +177,7 @@ void NCurveFile::set_file_reference( const string& which )
 
 void NCurveFile::set_par_attr( char attr )
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     static string sel;
     sel = wask( S("Set parameter status to '")+attr+"' for which parameters", sel );
@@ -204,7 +204,7 @@ void NCurveFile::set_par_attr( char attr )
 
 void NCurveFile::change_range()
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     string expr = sask( "Expression restricting the fit range" );
 
@@ -224,7 +224,7 @@ void NCurveFile::change_range()
 
 void NCurveFile::set_properties( string which )
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     while ( POlc fc = fiter.getC() ) {
         if      (which=="wc")
@@ -256,7 +256,7 @@ void NCurveFile::set_properties( string which )
 
 void NCurveFile::pars_query()
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
     while( ROlc fc = fiter.getC() ) {
         for( int ip=0; ip<fc->nP; ++ip )
             NOperate::Pointwise( "p" + S(ip) );
@@ -274,7 +274,7 @@ void NCurveFile::pars_abs()
         return;
     RNode Tsel = user_xaxparse( sel.c_str() );
 
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
     while( POlc fc = fiter.getC() ) {
         RObjVecInt vsel = Tsel->to_index_list( fc->nP );
         if (!vsel)
@@ -303,7 +303,7 @@ void NCurveFile::pars_copy()
         return;
     RNode Tsel = user_xaxparse( sel.c_str() );
 
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
     while( POlc fc = fiter.getC() ) {
         RObjVecInt vsel = Tsel->to_index_list( fc->nP );
         if (!vsel)
@@ -330,7 +330,7 @@ void NCurveFile::pars_copy()
 
 void NCurveFile::show_pars()
 {
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
     while( ROlc fc = fiter.getC() )
         fc->print_info_table();
 }
diff --git a/pub/lib/edif.cpp b/pub/lib/edif.cpp
index 0250c54d9357322fdc8be599f71f8b3ce48c5493..07a9c1435e1a34c472da442964d60f7bc931d168 100644
--- a/pub/lib/edif.cpp
+++ b/pub/lib/edif.cpp
@@ -36,7 +36,7 @@ using boost::format;
 
 void NEdif::show_files()
 {
-    IterateO fiter( IterateO::IterALL | IterateO::IterTOL );
+    FileIterator fiter( NOlm::all_file_indices(), true );
     POlo f;
     while( f = fiter.get() ) {
         POlc fc = P2C( f );
@@ -90,7 +90,7 @@ void NEdif::show_files()
 
 void NEdif::show_spectra()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while( POlo f = fiter.get() ) {
         cout << "file " << fiter.k() << ":\n";
         if ( POld fd = P2D( f ) ) {
@@ -117,7 +117,7 @@ void NEdif::show_spectra()
 
 void NEdif::show_coord()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while( POlo f = fiter.get() ) {
         string out = str( format( "%3i" ) % fiter.k() );
         out += " x: " + f->xco.str_compact();
@@ -134,7 +134,7 @@ void NEdif::show_coord()
 
 void NEdif::show_coordZ()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     POlo f = fiter.get();
     // Get current coordinates:
     vector<CCoord> ZCo = f->ZCo;;
@@ -161,7 +161,7 @@ void NEdif::show_coordZ()
 
 void NEdif::show_numpars()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( POlo f = fiter.get() ) {
         cout << "# file " << fiter.k() << ":\n";
         for ( int m=0; m<f->RPar.size(); m++ ) {
@@ -176,7 +176,7 @@ void NEdif::show_numpars()
 
 void NEdif::show_doc()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while( POlo f = fiter.get() ) {
         if( fiter.size()>1 )
             cout << "# file " << fiter.k() << ":\n";
@@ -195,7 +195,7 @@ void NEdif::show_doc()
 
 void NEdif::edit_fnam()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while( POlo f = fiter.get() ) {
         string fnam = wask( ("Rename " + f->name).c_str(), f->name );
         if ( fnam != f->name ){
@@ -211,7 +211,7 @@ void NEdif::edit_coord( string which )
 { // EMBEDDED_DIALOG
     CGenus genus( which );
 
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     // check whether all files have the same coordinate:
     POlo fin = fiter.get();
     CCoord old_co = fin->coord( genus );
@@ -261,7 +261,7 @@ void NEdif::edit_coord( string which )
 
 void NEdif::edit_doc()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     POlo f;
 
     // obtain unused tmp file name:
@@ -317,7 +317,7 @@ void NEdif::edit_doc()
 void NEdif::del_numpar()
 {
     int iN = zask( "Index of numeric parameter to delete" );
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( POlo f = fiter.get() ) {
         if( iN>=f->RPar.size() )
             throw "file " + S( fiter.k() ) + " has no numpar n" + S(iN);
diff --git a/pub/lib/file_out.cpp b/pub/lib/file_out.cpp
index 097bcde243a6dac588a0f367c27c28ca131cd9cd..8bccf2ac2f2a7bddd81f13094599339af4c184fe 100644
--- a/pub/lib/file_out.cpp
+++ b/pub/lib/file_out.cpp
@@ -37,7 +37,7 @@ namespace NFileOut {
 void NFileOut::save( string fmt, bool allow_overwrite )
 { // EMBEDDED_DIALOG
     string outfnam;
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while( POlo f = fiter.get() ) {
         // query output file name
         outfnam = wask( "Save as (."+fmt+")", f->name);
diff --git a/pub/lib/fit.cpp b/pub/lib/fit.cpp
index 782bfd11bfa7b4792fc4b71cd5b77d094d6f8bd7..74ca982c8ae4bc4b07e6edaee28947e5099a0d5e 100644
--- a/pub/lib/fit.cpp
+++ b/pub/lib/fit.cpp
@@ -503,7 +503,7 @@ void NCurveFit::fit( bool _allow_slow_conv )
     allow_slow_conv = _allow_slow_conv;
 
     NOlm::mem_backup_store();
-    IterateO fiter(NSel::selC());
+    FileIterator fiter(NSel::selC());
 
     while ( POlc fc = fiter.getC() ) {
 
diff --git a/pub/lib/jsel.cpp b/pub/lib/jsel.cpp
index cf369d9e351c8c21cb818c87636bca414784c514..c3aa18be92d972cfaa0e25cfe55d7cd1f7e143f3 100644
--- a/pub/lib/jsel.cpp
+++ b/pub/lib/jsel.cpp
@@ -27,7 +27,7 @@
 
 void JSelAsk( string quest, vector<int>& jLis )
 { // EMBEDDED_DIALOG
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     int nJmax = 0;
     while ( POlo f=fiter.get() )
         nJmax = std::max( nJmax, f->nJ() );
diff --git a/pub/lib/loop.cpp b/pub/lib/loop.cpp
index 4a916e4243c40f40efa993163fe3d39bfdb53720..175d451a8d841e5b876561d2a62f6b8a222a155f 100644
--- a/pub/lib/loop.cpp
+++ b/pub/lib/loop.cpp
@@ -16,23 +16,7 @@
 #include "fsel.hpp"
 #include "loop.hpp"
 
-IterateO::IterateO( int mode )
-{
-    if ( mode & IterALL ) {
-        Sel.resize( NOlm::mem_size() );
-        iota( Sel.begin(), Sel.end(), 0 );
-    } else {
-        Sel = NSel::sel();
-        for( int k: Sel )
-            if( k<0 || k>=NOlm::mem_size() )
-                throw "invalid entry " + S(k) + " in file selection";
-    }
-    if ( !(mode & IterTOL) && !size() )
-        throw S("empty file selection");
-    reset();
-}
-
-IterateO::IterateO( const vector<int>& _Sel, bool tolerate_empty )
+FileIterator::FileIterator( const vector<int>& _Sel, bool tolerate_empty )
 {
     Sel = _Sel;
     for( int k: Sel )
@@ -43,7 +27,7 @@ IterateO::IterateO( const vector<int>& _Sel, bool tolerate_empty )
     reset();
 }
 
-POlo IterateO::get()
+POlo FileIterator::get()
 {   if ( !going() )
         return POlo();
     int k=Sel[iV];
@@ -55,14 +39,14 @@ POlo IterateO::get()
     return NOlm::mem_get(k);
 }
 
-POld IterateO::getD()
+POld FileIterator::getD()
 {
     if( POld ret = P2D(get()) )
         return ret;
     throw S("BUG: non-D file found by D iterator");
 }
 
-POlc IterateO::getC()
+POlc FileIterator::getC()
 {
     if( POlc ret = P2C(get()) )
         return ret;
diff --git a/pub/lib/loop.hpp b/pub/lib/loop.hpp
index a813b3ac5f2233b0a616d5f1674c1b9922bc3f5e..2d6492215244118606c0530c357ff752b514a052 100644
--- a/pub/lib/loop.hpp
+++ b/pub/lib/loop.hpp
@@ -10,17 +10,13 @@
 
 //! Iterate over all files in selection.
 
-class IterateO {
+class FileIterator {
 private:
     int iV;
     vector<int> Sel;
     bool going() const { return iV<Sel.size(); }
 public:
-    // Bit values of 'mode' parameter in IterateO constructor:
-    static const int IterALL = 1; ///< select all online files
-    static const int IterTOL = 2; ///< tolerate empty selection
-    IterateO( int mode=0 );
-    IterateO( const vector<int>& _Sel, bool tolerate_empty=false );
+    FileIterator( const vector<int>& _Sel, bool tolerate_empty=false );
     void reset() { iV = 0; }
     int k() const { return Sel[iV-1]; }
     int iteration() const { return iV-1; }
diff --git a/pub/lib/manip.cpp b/pub/lib/manip.cpp
index bff10d411b0531ea6ff5097b91dbe7855fe74464..9e3961de59f3c81577e5c45f1df61aa918b049bf 100644
--- a/pub/lib/manip.cpp
+++ b/pub/lib/manip.cpp
@@ -41,7 +41,7 @@ namespace NManip {
 
 void NManip::freeze_slices()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     string sel;
     sel = wask( "Protect which spectra from forthcoming operations" );
     if ( sel=="" )
@@ -61,7 +61,7 @@ void NManip::freeze_slices()
 
 void NManip::unfreeze_all_slices()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( POlo fio = fiter.get() ) {
         for ( int j=0; j<fio->nJ(); ++j )
             fio->V[j]->frozen = false;
@@ -78,7 +78,7 @@ void NManip::unfreeze_all_slices()
 
 void NManip::points_select( bool sel_del )
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     static string sel = "";
     sel = wask( string( sel_del ? "Delete" : "Retain" ) + " which points", sel );
     if ( sel=="" )
@@ -117,7 +117,7 @@ void NManip::points_select( bool sel_del )
 
 void NManip::points_rebin()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
 
     static string sel;
     sel = wask( "Start bins at points", sel );
@@ -154,7 +154,7 @@ void NManip::points_rebin()
 
 void NManip::points_rebin_by_factor()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     static int ng=2;
     ng = iask( "Number of points per bin", ng );
     if ( ng<1 )
@@ -187,7 +187,7 @@ void NManip::points_rebin_by_factor()
 
 void NManip::points_rebin_by_err( const string& subcmd )
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     bool mode_abs;
     if      ( subcmd=="a" )
         mode_abs = true;
@@ -245,7 +245,7 @@ void NManip::points_rebin_by_err( const string& subcmd )
 
 void NManip::points_sort()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     string expr = sask("Sort points according to");
     if (expr=="") return;
     RNode T = user_xaxparse( expr.c_str() );
@@ -284,7 +284,7 @@ void NManip::points_sort()
 
 void NManip::points_rebin_duplicates()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     COld fout;
     while ( ROld fin = fiter.getD() ) {
         POld fout( fin->new_old() );
@@ -327,7 +327,7 @@ void NManip::points_rebin_duplicates()
 
 void NManip::points_symmetrize()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     static string expr = "0";
     expr = sask( "Assume symmetry with mirror positioned at", expr );
     if ( expr=="" ) return;
@@ -389,7 +389,7 @@ void NManip::points_symmetrize()
 
 void NManip::points_remove_err()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while ( ROld fin = fiter.getD() ) {
         POld fout( fin->new_old() );
         fout->lDoc.push_back("mpe-");
@@ -442,7 +442,7 @@ void NManip::slices_select( bool sel_del )
     static string jSel = "";
     JSelAsk( string( sel_del ? "Delete" : "Retain" ) + " which spectra", JSel );
 
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( ROlo fin = fiter.get() ) {
         POlo fout( fin->new_olo() );
         // JSel.evaluate( 0, fin->nJ()-1 );
@@ -463,7 +463,7 @@ void NManip::slices_select( bool sel_del )
 
 void NManip::slices_rebin()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     vector<int> JSel;
     static string jSel = "";
     JSelAsk( "Start groups at spectra", JSel );
@@ -577,7 +577,7 @@ void NManip::slices_rebin()
 
 void NManip::slices_merge()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     vector<int> JSel;
     static string jSel = "";
     JSelAsk( "Start groups at spectra", JSel );
@@ -616,7 +616,7 @@ void NManip::slices_merge()
 
 void NManip::slices_spawn()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     static int njj = 2;
     int njjIn = iask("output will have how many copies of input spectrum", njj);
     if (njjIn<1) return;
@@ -644,7 +644,7 @@ void NManip::slices_spawn()
 
 void NManip::exchange_x_z()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while ( ROld fin = fiter.getD() ) {
         POld fout( fin->new_old() );
 
@@ -727,7 +727,7 @@ void NManip::exchange_x_z()
 
 void NManip::slices_sort()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     string expr = sask("Sort spectra according to");
     if (expr=="") return;
     RNode T = user_xaxparse( expr.c_str() );
@@ -754,7 +754,7 @@ void NManip::slices_sort()
 
 void NManip::slices_sort_by_z()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( ROlo fin = fiter.get() ) {
         POlo fout( fin->new_olo() );
         for (int j=0; j<fin->nJ(); j++)
@@ -780,7 +780,7 @@ void NManip::slices_sort_by_z()
 
 void NManip::zcoords_reorder()
 { // EMBEDDED_DIALOG
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     int nzmin, nzmax = 0;
     char mod;
     string com;
@@ -882,7 +882,7 @@ void NManip::zcoords_reorder()
 
 void NManip::zcoord_delete()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     string sel;
     sel = wask( "List of z coordinates to be removed" );
     if ( sel=="" )
@@ -929,7 +929,7 @@ void NManip::zcoord_delete()
 
 void NManip::slices_break()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     while ( ROlo fin = fiter.get() ) {
         if ( !(fin->ZCo.size()) )
             throw S("no z coordinate");
@@ -971,7 +971,7 @@ void NManip::files_merge( const string& opts )
     if ( NSel::sel().size()<=1 )
         throw S("won't merge less than 2 files");
 
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     // parse options:
     bool add_zk = false;
     if ( opts=="+" )
@@ -1125,7 +1125,7 @@ void NManip::files_merge( const string& opts )
 
 void NManip::files_merge_pointwise()
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     // Copy first input file:
     ROld fin = fiter.getD();
     POld fout( fin->new_old() );
@@ -1176,7 +1176,7 @@ void NManip::interpolate()
         return;
     RNode T = user_xaxparse( expr.c_str() );
 
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while ( ROld fin = fiter.getD() ) {
         int k = fiter.k();
         POld fout( fin->new_old() );
@@ -1232,7 +1232,7 @@ void NManip::make_histogram()
     // Determine range:
     double xmin=0, xmax=0; // initialized to prevent warning
     int npts = 0;
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while ( ROld fin = fiter.getD() ) {
         for ( int j=0; j<fin->nJ(); j++ ) {
             RSpec sin = fin ->VS(j);
diff --git a/pub/lib/mem.cpp b/pub/lib/mem.cpp
index 10cb44a5e9fbe13d9545e073c48b60ab3da0183f..52fc49a3e00cc01e1b836b84c2e2f5b072ee6251 100644
--- a/pub/lib/mem.cpp
+++ b/pub/lib/mem.cpp
@@ -10,6 +10,7 @@
 #include "defs.hpp"
 #include "../trivia/vector_ops.hpp"
 #include <cmath>
+#include <algorithm>
 
 #include "olf.hpp"
 #include "ptr.hpp"
@@ -68,6 +69,15 @@ namespace NOlm {
         return ret;
     }
 
+    //! Returns list of all file indices.
+    const vector<int> all_file_indices()
+    {
+        vector<int> ret( NOlm::mem_size() );
+        iota( ret.begin(), ret.end(), 0 );
+        return ret;
+    }
+
+
 //**************************************************************************************************
 //*  Modify online memory, and adapt file NSel::selection
 //**************************************************************************************************
@@ -101,7 +111,7 @@ namespace NOlm {
     //! Append copy of NSel::selected files to online memory.
     void mem_copy()
     {
-        IterateO fiter(NSel::sel());
+        FileIterator fiter(NSel::sel());
         while ( ROlo fin=fiter.get() ){
             POlo fout( fin->new_olo( false ) );
             fout->copy_mainvec( fin );
@@ -125,7 +135,7 @@ namespace NOlm {
     void mem_backup_store()
     {
         BAK.clear();
-        IterateO fiter(NSel::sel());
+        FileIterator fiter(NSel::sel());
         while ( ROlo fin=fiter.get() ){
             POlo fout( fin->new_olo( false ) );
             fout->copy_mainvec( fin );
diff --git a/pub/lib/mem.hpp b/pub/lib/mem.hpp
index a0bec5f378a3f4e4318672351079527e613c1383..24d7419e3e5990330f9a259ebc8e81d86ba4178a 100644
--- a/pub/lib/mem.hpp
+++ b/pub/lib/mem.hpp
@@ -16,6 +16,7 @@ namespace NOlm {
     const POld mem_get_D( int k );
     const POlc mem_get_C( int k );
     const int  mem_size();
+    const vector<int> all_file_indices();
 
     // Modify online memory (file selection is changed accordingly):
     void mem_store( POlo olo, int k=-1 );
diff --git a/pub/lib/opr.cpp b/pub/lib/opr.cpp
index d35ca754cf2df16baeb3017c373f591f237b13a4..bc378d583c5fec5c257d301804ef22747adf75fc 100644
--- a/pub/lib/opr.cpp
+++ b/pub/lib/opr.cpp
@@ -38,7 +38,7 @@ using boost::format;
 
 void NOperate::show( const string& subcmd )
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
 
     static string expr = "1";
     expr = sask( "Show if", expr);
@@ -97,7 +97,7 @@ void NOperate::show( const string& subcmd )
 
 void NOperate::select( bool sel_del )
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
     static string expr;
     expr = sask((sel_del ? "Delete if" : "Retain if"), expr);
     if (expr=="")
@@ -148,7 +148,7 @@ void NOperate::select( bool sel_del )
 
 void NOperate::Pointwise( string llabel )
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
 
     CGenus lref(llabel);
 
@@ -259,7 +259,7 @@ void NOperate::Pointwise( string llabel )
 
 void NOperate::Integral()
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
 
     static string expr;
     expr = sask( "Functional", expr );
@@ -326,7 +326,7 @@ void NOperate::Integral()
 
 void NOperate::IntXY( string mode )
 { // EMBEDDED_DIALOG
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
 
     bool with_d;
     if      ( mode=="xy" )
@@ -396,7 +396,7 @@ void NOperate::IntXY( string mode )
 
 void NOperate::Functional( const string& subcmd )
 {
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while ( ROld fin = fiter.getD() ) {
         POld fout( fin->new_old() );
         fout->lDoc.push_back( "of"+subcmd );
diff --git a/pub/lib/plot.cpp b/pub/lib/plot.cpp
index a83e65f2eb897e585f52e715c4129748e07aaf50..2c0ae252e043eca4ba51cbfb9e297d1166ce43aa 100644
--- a/pub/lib/plot.cpp
+++ b/pub/lib/plot.cpp
@@ -35,7 +35,7 @@
 void determine_Xrange( CPlot* plot, vector<int>& JSel )
 {
     double inf, sup;
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     const vector<double> *vx;
     bool first = true;
     while( ROld fd = fiter.getD() ) {
@@ -67,7 +67,7 @@ void determine_Xrange( CPlot* plot, vector<int>& JSel )
 void determine_Yrange( CPlot* plot, vector<int>& JSel )
 {
     double inf=INFINITY, sup=-INFINITY;
-    IterateO fiter;
+    FileIterator fiter(NSel::sel());
     while( ROlo f = fiter.get() ){
         int k = fiter.k();
         ROlc fc = R2C( f );
@@ -413,7 +413,7 @@ int plot_curve_refine( CPlot* plot, ROlc fc, int k, int j, int cstyle )
 
 void NPlot::plot( class CPlot *plot, bool add, const string& mode )
 {
-    IterateO fiter(NSel::sel());
+    FileIterator fiter(NSel::sel());
 
     static vector<int> JSel;
     static int pstyle=1, cstyle=1;
diff --git a/pub/lib/special.cpp b/pub/lib/special.cpp
index 0779a2336fb52e955d89c2d91c919f87b8aac605..48cd9e1844895bec3f8fdc4255f7e90dc10e21c7 100644
--- a/pub/lib/special.cpp
+++ b/pub/lib/special.cpp
@@ -35,7 +35,7 @@ void NSpecial::FourierCosine()
     fftw_plan plan;
     int n;
 
-    IterateO fiter(NSel::selD());
+    FileIterator fiter(NSel::selD());
     while( ROld fin = fiter.getD() ) {
         POld fout( fin->new_old() );
         fout->lDoc.push_back("Fourier Cosine");
diff --git a/pub/lib/toplevel.cpp b/pub/lib/toplevel.cpp
index 75b09d8be91e2f59265bd957696498ded4dee863..87187134d9f9d6fda00c2c5929b491f22219503c 100644
--- a/pub/lib/toplevel.cpp
+++ b/pub/lib/toplevel.cpp
@@ -106,7 +106,7 @@ void CFrida::execute_cmd( const string cmdline )
             if( T->has_dummy() )
                 throw S("dummy argument t not allowed outside curve definitions");
             if( T->k_dependent() ) {
-                IterateO fiter(NSel::sel());
+                FileIterator fiter(NSel::sel());
                 while ( (fiter.get()) ) {
                     int k = fiter.k();
                     if ( fiter.size()>1 )