diff --git a/src/analysis/AnalysisBase.cpp b/src/analysis/AnalysisBase.cpp
index c2e1186f51e243b0d2a6b90237a994c4fb9621c7..afce106b2e939bde6e640f09fd339cc0f9384228 100644
--- a/src/analysis/AnalysisBase.cpp
+++ b/src/analysis/AnalysisBase.cpp
@@ -32,7 +32,7 @@ void AnalysisBase::registerKeywords( Keywords& keys ){
   ActionPilot::registerKeywords( keys );
   ActionAtomistic::registerKeywords( keys );
   ActionWithArguments::registerKeywords( keys );
-  ActionWithVessel::registerKeywords( keys ); keys.remove("TOL"); keys.remove("LOWMEM"); keys.reset_style("TIMINGS","hidden"); keys.isAnalysis();  
+  ActionWithVessel::registerKeywords( keys ); keys.remove("TOL"); keys.reset_style("TIMINGS","hidden"); keys.isAnalysis();  
   keys.add("atoms-2","USE_OUTPUT_DATA_FROM","use the ouput of the analysis performed by this object as input to your new analysis object");
 }
 
diff --git a/src/analysis/EuclideanDissimilarityMatrix.cpp b/src/analysis/EuclideanDissimilarityMatrix.cpp
index 4ce620338cc3f5b09fed121bae9051416978cbcd..2d7b85dbe1d10f6813109d4d3c37323caba6fdbf 100644
--- a/src/analysis/EuclideanDissimilarityMatrix.cpp
+++ b/src/analysis/EuclideanDissimilarityMatrix.cpp
@@ -37,7 +37,6 @@ namespace analysis {
 
 class EuclideanDissimilarityMatrix : public AnalysisWithDataCollection {
 private:
-  bool lowmem;
   Matrix<double> dissimilarities;
 public:
   static void registerKeywords( Keywords& keys );
@@ -57,27 +56,24 @@ PLUMED_REGISTER_ACTION(EuclideanDissimilarityMatrix,"EUCLIDEAN_DISSIMILARITIES")
 void EuclideanDissimilarityMatrix::registerKeywords( Keywords& keys ){
   AnalysisWithDataCollection::registerKeywords( keys );
   keys.reset_style("METRIC","atoms-1"); keys.use("FRAMES");
-  keys.addFlag("LOWMEM",false,"lower the memory requirements of the calculation");
 }
 
 EuclideanDissimilarityMatrix::EuclideanDissimilarityMatrix( const ActionOptions& ao ):
 Action(ao),
 AnalysisWithDataCollection(ao)
 {
-  parseFlag("LOWMEM",lowmem);
-  if( lowmem ) log.printf("  lowering memory requirements \n");
 }
 
 void EuclideanDissimilarityMatrix::performAnalysis(){
   // Resize dissimilarities matrix and set all elements to zero
-  if( !lowmem ){
+  if( !usingLowMem() ){
      dissimilarities.resize( getNumberOfDataPoints(), getNumberOfDataPoints() ); dissimilarities=0;
   }
 }
 
 double EuclideanDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const unsigned& jframe ){
   plumed_dbg_assert( iframe<getNumberOfDataPoints() && jframe<getNumberOfDataPoints() );
-  if( !lowmem ){
+  if( !usingLowMem() ){
       if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); }
   }
   if( iframe!=jframe ){
@@ -85,9 +81,11 @@ double EuclideanDissimilarityMatrix::getDissimilarity( const unsigned& iframe, c
      if( mydata ){ myref1=AnalysisBase::getReferenceConfiguration(iframe,true); myref2=AnalysisBase::getReferenceConfiguration(jframe,true); }
      else { myref1 = data[iframe]; myref2 = data[jframe]; }
      if( myref1->getNumberOfProperties()>0 ){
-        dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = property_distance( myref1, myref2, true );
+        if( !usingLowMem() ) dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = property_distance( myref1, myref2, true );
+        else return property_distance( myref1, myref2, true );
      } else {
-        dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = distance( getPbc(), getArguments(), myref1, myref2, true ); 
+        if( !usingLowMem() ) dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = distance( getPbc(), getArguments(), myref1, myref2, true ); 
+        else return distance( getPbc(), getArguments(), myref1, myref2, true );
      }
      return dissimilarities(iframe,jframe);
   }
diff --git a/src/dimred/DimensionalityReductionBase.cpp b/src/dimred/DimensionalityReductionBase.cpp
index 0861b2d272a43c417101204ce062121b8c32f7ac..ec7c165c9ff33e4562ff6f334c829ba6898592c9 100644
--- a/src/dimred/DimensionalityReductionBase.cpp
+++ b/src/dimred/DimensionalityReductionBase.cpp
@@ -64,6 +64,7 @@ void DimensionalityReductionBase::getDataPoint( const unsigned& idata, std::vect
 }
 
 void DimensionalityReductionBase::performAnalysis(){
+  log.printf("Generating projections required by action %s \n",getLabel().c_str() );
   // Resize the tempory array (this is used for out of sample)
   dtargets.resize( getNumberOfDataPoints() );
   // Resize the projections array
@@ -84,6 +85,7 @@ void DimensionalityReductionBase::performAnalysis(){
   }
   // This calculates the projections of the points
   calculateProjections( targets, projections );
+  log.printf("Generated projections required by action %s \n",getLabel().c_str() );
 }
 
 double DimensionalityReductionBase::calculateStress( const std::vector<double>& p, std::vector<double>& d ){