diff --git a/distrib/INSTALL.html b/distrib/INSTALL.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb16cd356ea7b713b08d83530f98adfe0af84650
--- /dev/null
+++ b/distrib/INSTALL.html
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>FRIDA - Fast reliable interactive data analysis - INSTALL</title>
+<meta http-equiv="REFRESH" content="0;url=http://iffwww.iff.kfa-juelich.de/~wuttke/doku/doku.php?id=frida:installation"></HEAD>
+<BODY>
+</BODY>
+</HTML>
diff --git a/distrib/frida2-100424.tgz b/distrib/frida2-100424.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..51bfd40f8256b47699f8f969678b0f072b584521
Binary files /dev/null and b/distrib/frida2-100424.tgz differ
diff --git a/pub/CHANGELOG b/pub/CHANGELOG
index d6dd11f20116f02cda224f75bc9abcb5b1ad7d6c..d2045a4d669633393402ac6c3916c31243a06bef 100644
--- a/pub/CHANGELOG
+++ b/pub/CHANGELOG
@@ -1,3 +1,5 @@
+- function names -> "clear", "remove" for compatibility with STL
+
 Release 100424:
 
 - improve "df"
diff --git a/pub/src/curve.cpp b/pub/src/curve.cpp
index 428683e19a7be56b1f661aa50eb2b71e474200b6..885df84686732d465050df83d0b3a709836e8537 100644
--- a/pub/src/curve.cpp
+++ b/pub/src/curve.cpp
@@ -49,7 +49,7 @@ bool allow_slow_conv = true;
 
 //! Initialize curve. Used when creating or loading a curve file.
 
-void CCurve::Clear(void)
+void CCurve::clear(void)
 {
     P.clear();
     z.clear();
@@ -786,7 +786,7 @@ void NCurveFile::IntegrateFile( const COlc *fin, const int k,
             throw string( "input has no z coord" );
         fout.ZCo.pop_back();
         fout.lDoc.push_back( "ci " + ( mode=="p" ? strg(ip) : mode ) );
-        S.Clear();
+        S.clear();
         S.z = fin->VC[0].z;
         S.z.pop_back();
     }
@@ -822,7 +822,7 @@ void NCurveFile::IntegrateFile( const COlc *fin, const int k,
             (j+1)<fin->nSpec() && 
             fin->VC[j+1].z[nz-2]!=fin->VC[j].z[nz-2]) {
             fout.VS.push_back(S);
-            S.Clear();
+            S.clear();
             S.z = fin->VC[j+1].z;
             S.z.pop_back();
         }
diff --git a/pub/src/curve.h b/pub/src/curve.h
index 6190daa6a58dae472e3903c3c3f5fa9810a4300a..0e205afeb65f0bd37d9348709253c16ab70d740f 100644
--- a/pub/src/curve.h
+++ b/pub/src/curve.h
@@ -9,7 +9,7 @@ class CCurve {
     vector<double> z;
     double Quality[N_FIT_METRICS];
     
-    void Clear( void );
+    void clear( void );
 };
 
 
diff --git a/pub/src/edif.cpp b/pub/src/edif.cpp
index 3e4fc55d8e3bc85c979ac88b6af71cad0b60139d..6a58ecfe432a989c5f086afb4550165164d018a9 100644
--- a/pub/src/edif.cpp
+++ b/pub/src/edif.cpp
@@ -558,7 +558,7 @@ void NEdif::ReadIn(void)
     int ns = 0;
     while(1) {
 
-        S.Clear();
+        S.clear();
 
         switch(mInpZ) {
         case 1:
@@ -634,7 +634,7 @@ void NEdif::ReadIn(void)
                     } else if( linv[imcz]!=zold ){
                         olf.VS.push_back(S);
                         ns++;
-                        S.Clear();
+                        S.clear();
                         S.z.push_back(linv[imcz]);
                         zold = linv[imcz];
                     }
@@ -826,7 +826,7 @@ void NEdif::ReadTab( string qualif )
                     olf.ZCo.push_back( CCoord("line", "") );
                 }
                 if( !horizontal ){
-                    S.Clear();
+                    S.clear();
                     S.z.resize( nz );
                     for( uint iz=0; iz<nzdat; ++iz )
                         S.z[iz] = zdat[iz];
@@ -852,7 +852,7 @@ void NEdif::ReadTab( string qualif )
                     strg(nblock)+" ["+lin+"]";
             
             if( horizontal ) { // new spectrum for every line 
-                S.Clear();
+                S.clear();
                 S.z.resize( nz );
                 for( uint iz=0; iz<nzdat; ++iz )
                     S.z[iz] = zdat[iz];
@@ -929,7 +929,7 @@ void NEdif::MakeGrid(void)
     // *** loop over spectra ***
     for (int j=0; j<nj; ++j) {
 
-        S.Clear();
+        S.clear();
 
         S.x.resize(ni);
         for( uint i=0; i<ni; ++i )
diff --git a/pub/src/file_in.cpp b/pub/src/file_in.cpp
index 16c28c5b8ab81d36b9536501ba3260832c78fca9..72782bd8cdf099a4cdda287ddf2cc39767fa6d30 100644
--- a/pub/src/file_in.cpp
+++ b/pub/src/file_in.cpp
@@ -338,7 +338,7 @@ void NFileIn::LoadSpec_01( FILE *F_in, CSpec* sout, int nz )
     char lab[4];
     double v, w;
 
-    sout->Clear();
+    sout->clear();
 
     // get z values:
     if ((err=fscanf(F_in, "%4c%u\n", lab, &m))!=2)
@@ -487,7 +487,7 @@ void NFileIn::Load_96( FILE *F_in, string flong )
 
     for( uint j=0; j<nspec; ++j ){
 
-        sout.Clear();
+        sout.clear();
 
         if ( mystd::freadln(F_in, &lin)<=0 || lin.length()<10 || 
              lin.substr(0,9)!=string("&spectrum") ||
diff --git a/pub/src/manip.cpp b/pub/src/manip.cpp
index c4bdd28625c079bd2a2629e8e973024173a7a5b4..422021b96829346a5da258739aa53e1e1b124b3c 100644
--- a/pub/src/manip.cpp
+++ b/pub/src/manip.cpp
@@ -211,7 +211,7 @@ void NManip::PtsBreak()
                 //printf("DEB subspectrum from %d to %d-1\n",i0,ib);
                 if (ib<i0)
                     throw "invalid break "+strg(ib)+" < "+strg(i0);
-                Sout.Clear();
+                Sout.clear();
                 for (uint i=i0; i<ib; ++i)
                     Sout.push_xy(Sin->x[i], Sin->y[i]);
                 Sout.z = Sin->z;
@@ -346,7 +346,7 @@ void NManip::PtsRetainEqui()
                     if (fabs(x[ii]-x[ii-1]-step) > tol) {
                         printf("unselect %u to %u\n", 
                                i, ii-1);
-                        Sout.erase(offs+i,offs+ii);
+                        Sout.remove(offs+i,offs+ii);
                         offs -= ii-i;
                         break;
                     } 
@@ -354,7 +354,7 @@ void NManip::PtsRetainEqui()
                 i = ii;
             }
             if (i<n) printf("overhang %u to %u\n", i, n-1);
-            Sout.erase(offs+i, offs+n);
+            Sout.remove(offs+i, offs+n);
             if (Sout.size())
                 fout.VS.push_back(Sout);
         }
@@ -414,8 +414,8 @@ void NManip::PtsGroupWeighted()
         fout.lDoc.push_back("mpgw "+strg(ng));
         fout2.lDoc.push_back("error bars of mpgw "+strg(ng));
 
-        Sout.Clear();
-        Sout2.Clear();
+        Sout.clear();
+        Sout2.clear();
 
         vector<double> xgrp(ng);
         vector< vector<double> > ytmp, ygrp, ygrp2;
@@ -509,11 +509,11 @@ void NManip::PtsGroupWeighted()
                             sqrt( ygrp2[iy][igrp] - SQR(ygrp[iy][igrp]) ) );
                     }
                     fout.VS.push_back(Sout);
-                    Sout.Clear();
+                    Sout.clear();
                     Sout.z = Sin->z;
                     Sout.z.pop_back();
                     fout2.VS.push_back(Sout2);
-                    Sout2.Clear();
+                    Sout2.clear();
                     Sout2.z = Sin->z;
                     Sout2.z.pop_back();
                 }
@@ -553,7 +553,7 @@ void NManip::PtsSymmetrize()
 
         for (uint j=0; j<fin->nSpec(); j++) {
             sin = &(fin->VS[j]);
-            Sout.Clear();
+            Sout.clear();
             if( mystd::sorted( sin->x )!=1 )
                 throw string( "not sorted" );
             double step;
@@ -631,8 +631,7 @@ void NManip::ScaRemoveConstantZ( COlo *f )
         if( z_is_const ){
             printf( " constant z%i becomes r%zu\n", iz, f->RPar.size() );
             f->RPar.push_back( CParam( f->ZCo[iz], z ) );
-            f->ZCo.erase( f->ZCo.begin()+iz );
-            f->erase_z( iz );
+            f->remove_z( iz );
         }
     }
 }
@@ -668,7 +667,7 @@ void NManip::ScaSelect( string del_or_ret )
         fout->lDoc.push_back( "ms" + del_or_ret + " " + JSel.str());
         for( int j=ein->nSpec()-1; j>=0; --j )
             if( sel_ret ^ JSelSorted.contains( j ) )
-                fout->erase( j );
+                fout->remove( j );
         ScaRemoveConstantZ( fout );
         NOlm::OloAdd( fout );
         delete fout;
@@ -893,7 +892,7 @@ void NManip::ScaExch()
 
             ii = 0; // a guess
             for(i=0; i<xcommon.size(); ++i) {
-                Sout.Clear();
+                Sout.clear();
                 Sout.z = zcommon;
                 Sout.z.push_back(xcommon[i]);
 
diff --git a/pub/src/olm.h b/pub/src/olm.h
index 95a08a683dc589b233f96c66250e0bdb4f3ce35e..b93e030f6526b3fc39af1daa89474a70adf14687 100644
--- a/pub/src/olm.h
+++ b/pub/src/olm.h
@@ -23,10 +23,10 @@ class COlo {
     virtual inline ~COlo() {}; // magic: makes dynamic_cast possible
 
     virtual void clear_V() = 0;
-    virtual void erase( uint j ) = 0;
+    virtual void remove( uint j ) = 0;
     virtual uint nSpec() const = 0;
     virtual double z( uint j, uint iz ) const = 0;
-    virtual void erase_z( uint iz ) = 0;
+    inline void remove_z( uint iz ){ ZCo.erase( ZCo.begin()+iz ); };
 
     inline uint nZ() const { return ZCo.size(); };
 };
@@ -41,10 +41,11 @@ class COld : public COlo {
     COld( class COlc const* c );
 
     inline void clear_V() { VS.clear(); };
-    inline void erase( uint j ) { VS.erase( VS.begin()+j ); };
+    inline void remove( uint j ) { VS.erase( VS.begin()+j ); };
     inline uint nSpec() const { return VS.size(); };
     inline double z( uint j, uint iz ) const { return VS[j].z[iz]; };
-    inline void erase_z( uint iz ){
+    inline void remove_z( uint iz ){
+        COlo::remove_z( iz );
         for( uint j=0; j<nSpec(); ++j )
             VS[j].z.erase( VS[j].z.begin()+iz );
     };
@@ -75,10 +76,11 @@ class COlc : public COlo {
     inline COlc() : weight_y_log(false), kconv(-1) { ; };
 
     inline void clear_V() { VC.clear(); };
-    inline void erase( uint j ) { VC.erase( VC.begin()+j ); };
+    inline void remove( uint j ) { VC.erase( VC.begin()+j ); };
     inline double z( uint j, uint iz ) const { return VC[j].z[iz]; };
     inline uint nSpec() const { return VC.size(); };
-    inline void erase_z( uint iz ){
+    inline void remove_z( uint iz ){
+        COlo::remove_z( iz );
         for( uint j=0; j<nSpec(); ++j )
             VC[j].z.erase( VC[j].z.begin()+iz );
     };
diff --git a/pub/src/opr.cpp b/pub/src/opr.cpp
index 5635ee16170ccf44d0e8d10067b3d098eb36f569..4bfdf3047201a5bf71ab8c1bce8fe21883345511 100644
--- a/pub/src/opr.cpp
+++ b/pub/src/opr.cpp
@@ -340,7 +340,7 @@ void NOperate::Integral(void)
             T->coord(&(fout.yco), k);
         }
 
-        S.Clear();
+        S.clear();
         S.z = fin->VS[0].z;
         S.z.pop_back();
         for ( uint j=0; j<fin->nSpec(); j++ ) {
@@ -356,7 +356,7 @@ void NOperate::Integral(void)
                 if ((j+1)<fin->VS.size() && 
                     fin->VS[j+1].z[nz-2]!=zval) {
                     fout.VS.push_back( S );
-                    S.Clear();
+                    S.clear();
                     S.z = fin->VS[j+1].z;
                     S.z.pop_back();
                 }
@@ -403,7 +403,7 @@ void NOperate::IntXY(void)
         fout.ZCo.pop_back();
         fout.xco = xco;
         fout.yco = yco;
-        S.Clear();
+        S.clear();
         if( !(fin->nSpec()) )
             throw string( "input file has no spectra" );
         S.z = fin->VS[0].z;
@@ -418,7 +418,7 @@ void NOperate::IntXY(void)
                 if ((j+1)<fin->VS.size() && 
                     fin->VS[j+1].z[nz-2]!=zval) {
                     fout.VS.push_back(S);
-                    S.Clear();
+                    S.clear();
                     S.z = fin->VS[j+1].z;
                     S.z.pop_back();
                 }
@@ -480,7 +480,7 @@ void NOperate::Eigen()
 
         gsl_eigen_symmv( Data, EVal, EVec, Work );
         gsl_eigen_symmv_sort( EVal, EVec, GSL_EIGEN_SORT_VAL_DESC  );
-        Sout0.Clear();
+        Sout0.clear();
         for( i=0; i<n; ++i ){
             Sout0.push_xy( (double) i, EVal->data[i] );
             printf( "eval %d: %g\n", i, EVal->data[i] );
@@ -488,7 +488,7 @@ void NOperate::Eigen()
         fout0.VS.push_back( Sout0 );
 
         for( uint j=0; j<n; j++ ){
-            fout1.VS[j].Clear();
+            fout1.VS[j].clear();
             fout1.VS[j].z.push_back( (double) j);
             for( i=0; i<n; i++ ){
                 fout1.VS[j].push_xy( (double) i,
@@ -587,7 +587,7 @@ void NOperate::CalcCorrel()
             nmax = 0;
 
             if( ndim==2 ){
-                fout.VS[j].Clear();
+                fout.VS[j].clear();
                 fout.VS[j].z.push_back( S0->z[0] );
             }
 
@@ -739,7 +739,7 @@ void NOperate::CalcAvgeDiff()
         fout.xco = f0->ZCo[0];
             
         for (uint j=0; j<f0->nSpec(); j++) {
-            fout.VS[j].Clear();
+            fout.VS[j].clear();
             S0 = &(f0->VS[j]);
             fout.VS[j].z.push_back( S0->z[0] );
             for (uint jj=0; jj<f1->nSpec(); ++jj) {
@@ -1006,7 +1006,7 @@ void NIntOld::Opr()
         }
         fout.lDoc.push_back( "oio "+strg(mod)+" # y = "+fout.yco.name );
 
-        S.Clear();
+        S.clear();
         S.z = fin->VS[0].z;
         S.z.pop_back();
         for (uint j=0; j<fin->nSpec(); j++) {
@@ -1022,7 +1022,7 @@ void NIntOld::Opr()
                 if ((j+1)<fin->VS.size() && 
                     fin->VS[j+1].z[nz-2]!=zval) {
                     fout.VS.push_back(S);
-                    S.Clear();
+                    S.clear();
                     S.z = fin->VS[j+1].z;
                     S.z.pop_back();
                 }
diff --git a/pub/src/rssm.cpp b/pub/src/rssm.cpp
index 376080debeb563cf3a06bbb70e39d80293068a86..0baaa2c25ddc3bbaaf15a3c4c2c61bd4feddc401 100644
--- a/pub/src/rssm.cpp
+++ b/pub/src/rssm.cpp
@@ -280,7 +280,7 @@ void NRSSM::ReadSpec( int format, int flag )
 
     CSpec S;
     for( int j=0; j<ndet; ++j ){
-        S.Clear();
+        S.clear();
         S.z.resize( 1 );
         S.z[0] = R.angles[j];
         for( iolf=0; iolf<8; ++iolf )
diff --git a/pub/src/spec.cpp b/pub/src/spec.cpp
index e938567e7df35578f8564ae5c1c1da2b29e691f6..bc9d9931559439472bedc8925c14382748c923b2 100644
--- a/pub/src/spec.cpp
+++ b/pub/src/spec.cpp
@@ -37,7 +37,7 @@ void CSpec::push_xyd( double _x, double _y, double _dy )
 
 //! Remove data points according to given indices.
 
-void CSpec::erase( uint begin, uint end )
+void CSpec::remove( uint begin, uint end )
 {
     x.erase( x.begin()+begin, x.begin()+end );
     y.erase( y.begin()+begin, y.begin()+end );
@@ -47,7 +47,7 @@ void CSpec::erase( uint begin, uint end )
 
 //! Reset to initial state.
 
-void CSpec::Clear()
+void CSpec::clear()
 {
     x.clear();
     y.clear();
diff --git a/pub/src/spec.h b/pub/src/spec.h
index 9ed0df0e7289d2fad456c1d9a2c91ae0ccc9ed4c..83ea69417177e5e3bf2dc5d60d716248ee808af2 100644
--- a/pub/src/spec.h
+++ b/pub/src/spec.h
@@ -6,8 +6,8 @@ class CSpec {
     // modify:
     void push_xy( double _x, double _y );
     void push_xyd( double _x, double _y, double _dy );
-    void Clear(); 
-    void erase( uint begin, uint end );
+    void clear(); 
+    void remove( uint begin, uint end );
 
     // extract data:
     uint size() const;