diff --git a/src/colvar/ContactMap.cpp b/src/colvar/ContactMap.cpp
index d76067209ef4c24b83007bb1bf75ded47699c62b..4cb1c84b930035335542f7bc41fa7abba5bdace9 100644
--- a/src/colvar/ContactMap.cpp
+++ b/src/colvar/ContactMap.cpp
@@ -199,10 +199,10 @@ docmdist(false)
      std::string num; Tools::convert(nswitch+1, num);
      error("missing SWITCH" + num + " keyword");
   }
+
   // Read in reference values 
   nswitch=0;
-  reference.resize( ga_lista.size() );
-  for(unsigned i=0;i<ga_lista.size();++i) reference[i]=0.;
+  reference.resize(ga_lista.size(), 0.);
   for(unsigned i=0;i<ga_lista.size();++i){
       if( !parseNumbered( "REFERENCE", i+1, reference[i] ) ) break;
       nswitch++; 
@@ -211,14 +211,14 @@ docmdist(false)
      parse("REFERENCE",reference[0]);
      for(unsigned i=1;i<ga_lista.size();++i){
        reference[i]=reference[0];
+       nswitch++; 
      }
-     nswitch = ga_lista.size();
   }
-  if ( nswitch != ga_lista.size() ) error("missing REFERENCE keyword");
+  if(nswitch == 0 && docmdist) error("with CMDIST one must use REFERENCE to setup the reference contact map");
+
   // Read in weight values 
   nswitch=0;
-  weight.resize( ga_lista.size() );
-  for(unsigned i=0;i<ga_lista.size();++i) weight[i]=1.;
+  weight.resize(ga_lista.size(), 1.0);
   for(unsigned i=0;i<ga_lista.size();++i){
       if( !parseNumbered( "WEIGHT", i+1, weight[i] ) ) break;
       nswitch++; 
@@ -230,7 +230,6 @@ docmdist(false)
      }
      nswitch = ga_lista.size();
   }
-  if ( nswitch != ga_lista.size() ) error("missing WEIGHT keyword");
 
   // Ouput details of all contacts 
   for(unsigned i=0;i<sfs.size();++i){