diff --git a/src/colvar/DRMSD.cpp b/src/colvar/DRMSD.cpp
index 7b447bb7272ca9183f497e91f01b3cbe93348a99..34b644e479ea3f4251003e3546c599d6025bf19a 100644
--- a/src/colvar/DRMSD.cpp
+++ b/src/colvar/DRMSD.cpp
@@ -24,6 +24,7 @@
 #include "ActionRegister.h"
 #include "tools/PDB.h"
 #include "reference/DRMSD.h"
+#include "reference/MetricRegister.h"
 #include "core/Atoms.h"
 
 using namespace std;
@@ -95,6 +96,7 @@ void DRMSD::registerKeywords(Keywords& keys){
   keys.add("compulsory","REFERENCE","a file in pdb format containing the reference structure and the atoms involved in the CV.");
   keys.add("compulsory","LOWER_CUTOFF","only pairs of atoms further than LOWER_CUTOFF are considered in the calculation.");
   keys.add("compulsory","UPPER_CUTOFF","only pairs of atoms closer than UPPER_CUTOFF are considered in the calculation.");
+  keys.add("compulsory","TYPE","DRMSD","what kind of DRMSD would you like to calculate");
 }
 
 DRMSD::DRMSD(const ActionOptions&ao):
@@ -120,8 +122,8 @@ PLUMED_COLVAR_INIT(ao), pbc_(true), myvals(1,0), mypack(0,0,myvals)
       error("missing input file " + reference );
 
   // store target_ distance
-  ReferenceConfigurationOptions ro( "DRMSD" );
-  drmsd_= new PLMD::DRMSD( ro );
+  std::string type; parse("TYPE",type);
+  drmsd_= metricRegister().create<PLMD::DRMSD>( type );
   drmsd_->setBoundsOnDistances( !nopbc, lcutoff, ucutoff );
   drmsd_->set( pdb );