diff --git a/configure b/configure
index 55de964945844f455b3eed6405e0f7863bb79728..dd7a26ec687ac3d0053a2e423e804caa7708bb71 100755
--- a/configure
+++ b/configure
@@ -4826,6 +4826,31 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports explicit" >&5
+$as_echo_n "checking whether $CXX supports explicit... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+ class A{explicit A(){}};
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; } ;
+   $as_echo "#define explicit /**/" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
 #### Compulsory libraries ####
 # some of them might be made optional if we find that are not available in some system
 { $as_echo "$as_me:${as_lineno-$LINENO}: Now we will check compulsory headers and libraries" >&5
diff --git a/configure.ac b/configure.ac
index 9d614bb6c3d430019b0557e236e1052e9af69678..5125466dee3ac8cfeba3c416bac01d93ef55aa1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -211,6 +211,13 @@ then
   PLUMED_CHECK_CXXFLAG([-Wold-style-cast])
 fi
 
+AC_MSG_CHECKING([whether $CXX supports explicit])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ class A{explicit A(){}};])],
+  [AC_MSG_RESULT([yes])],
+  [AC_MSG_RESULT([no]) ;
+   AC_DEFINE([explicit],[])])
+
+
 #### Compulsory libraries ####
 # some of them might be made optional if we find that are not available in some system
 AC_MSG_NOTICE([Now we will check compulsory headers and libraries])
diff --git a/src/analysis/Analysis.h b/src/analysis/Analysis.h
index 33a01f9726c1be0dd4253b4e9f7468c9c98563f7..9044ac07f0eeb44d768e57772e6f2a09a8991393 100644
--- a/src/analysis/Analysis.h
+++ b/src/analysis/Analysis.h
@@ -134,7 +134,7 @@ protected:
   std::string getOutputFormat() const ;
 public:
   static void registerKeywords( Keywords& keys );
-  Analysis(const ActionOptions&);
+  explicit Analysis(const ActionOptions&);
   ~Analysis();
   void prepare();
   void calculate();
diff --git a/src/analysis/AnalysisWithLandmarks.h b/src/analysis/AnalysisWithLandmarks.h
index 86426fc7961c612b86af1e9c0bf6ad25cd96991b..aa361123cd0cc8c9843ca69a1499cddf886524a1 100644
--- a/src/analysis/AnalysisWithLandmarks.h
+++ b/src/analysis/AnalysisWithLandmarks.h
@@ -47,7 +47,7 @@ protected:
   unsigned getNumberOfLandmarks() const ;
 public:
   static void registerKeywords( Keywords& keys );
-  AnalysisWithLandmarks( const ActionOptions& );
+  explicit AnalysisWithLandmarks( const ActionOptions& );
   ~AnalysisWithLandmarks();
 /// Do the analysis
   void performAnalysis();
diff --git a/src/analysis/ClassicalMultiDimensionalScaling.cpp b/src/analysis/ClassicalMultiDimensionalScaling.cpp
index f64e5211d5a1f1a4c2be805f11ac494c526516bf..20e2451de06dfaed2357252e995ec1c8130a70d0 100644
--- a/src/analysis/ClassicalMultiDimensionalScaling.cpp
+++ b/src/analysis/ClassicalMultiDimensionalScaling.cpp
@@ -172,7 +172,7 @@ private:
   PointWiseMapping* myembedding;
 public:
   static void registerKeywords( Keywords& keys );
-  ClassicalMultiDimensionalScaling( const ActionOptions& ao );
+  explicit ClassicalMultiDimensionalScaling( const ActionOptions& ao );
   ~ClassicalMultiDimensionalScaling();
   void analyzeLandmarks();
 };
diff --git a/src/analysis/Commit.cpp b/src/analysis/Commit.cpp
index a164f4d905bcfb8f3f7fae09537449e5414add13..8879bf5f1085b4452c0c4a916a49b92a74f845cb 100644
--- a/src/analysis/Commit.cpp
+++ b/src/analysis/Commit.cpp
@@ -65,7 +65,7 @@ private:
   std::vector<double> bmin, bmax;
 public:
   static void registerKeywords( Keywords& keys );
-  Committor(const ActionOptions&ao);
+  explicit Committor(const ActionOptions&ao);
   void calculate();
   void apply(){}
 };
diff --git a/src/analysis/Histogram.cpp b/src/analysis/Histogram.cpp
index 761d8a26a9dc12c2a22c5ce66cdc4ef6c3c49d0a..befe10b728fff85359ed663582350e2965f1e926 100644
--- a/src/analysis/Histogram.cpp
+++ b/src/analysis/Histogram.cpp
@@ -122,7 +122,7 @@ private:
   bool unnormalized;
 public:
   static void registerKeywords( Keywords& keys );
-  Histogram(const ActionOptions&ao);
+  explicit Histogram(const ActionOptions&ao);
   void performAnalysis();
   void performTask( const unsigned& , const unsigned& , MultiValue& ) const ;
 };
diff --git a/src/analysis/LandmarkSelectionBase.h b/src/analysis/LandmarkSelectionBase.h
index 123dd14cfe8d72eb9424b4fed2b869277b7262f5..4e12a403c0fbfd1c20bbed33f2402d34f8164027 100644
--- a/src/analysis/LandmarkSelectionBase.h
+++ b/src/analysis/LandmarkSelectionBase.h
@@ -71,7 +71,7 @@ protected:
 /// Transfer frame i in the underlying action to the object we are going to analyze
   void selectFrame( const unsigned& , MultiReferenceBase* );
 public:
-  LandmarkSelectionBase( const LandmarkSelectionOptions& lo );
+  explicit LandmarkSelectionBase( const LandmarkSelectionOptions& lo );
   virtual ~LandmarkSelectionBase();
 /// Check everything was read in
   void checkRead() const ;
diff --git a/src/analysis/SelectAllFrames.cpp b/src/analysis/SelectAllFrames.cpp
index b0f7512643bcd3b4814b74b0912276340d9c49d7..6e9101508afe82efb3e3382d4181c93f8811a27c 100644
--- a/src/analysis/SelectAllFrames.cpp
+++ b/src/analysis/SelectAllFrames.cpp
@@ -27,7 +27,7 @@ namespace analysis {
 
 class CopyAllFrames : public LandmarkSelectionBase {
 public:
-  CopyAllFrames( const LandmarkSelectionOptions& lo );
+  explicit CopyAllFrames( const LandmarkSelectionOptions& lo );
   void select( MultiReferenceBase* );
 };
 
diff --git a/src/bias/ABMD.cpp b/src/bias/ABMD.cpp
index b71f88a67909a99cc34007dccbd6fc0c8b40fd31..45a41f3c2b766a15cbedd3cdfd403c6b0e631f0f 100644
--- a/src/bias/ABMD.cpp
+++ b/src/bias/ABMD.cpp
@@ -89,7 +89,7 @@ class ABMD : public Bias{
   std::vector<int> seed;
   vector<Random> random;
 public:
-  ABMD(const ActionOptions&);
+  explicit ABMD(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/bias/Bias.h b/src/bias/Bias.h
index b7092b49155776fe49a76650838915622d8fdd32..9e0ae8859fd804a41adf4fdaf5522bf3521f6a5f 100644
--- a/src/bias/Bias.h
+++ b/src/bias/Bias.h
@@ -48,7 +48,7 @@ protected:
   void setOutputForce(int i,double g);
 public:
   static void registerKeywords(Keywords&);
-  Bias(const ActionOptions&ao);
+  explicit Bias(const ActionOptions&ao);
   void apply();
   unsigned getNumberOfDerivatives();
   void turnOnDerivatives();
diff --git a/src/bias/BiasValue.cpp b/src/bias/BiasValue.cpp
index 30ef5f794a3023d1d81f7918c3d160930dd0cb3f..9a2e9e0136a77d6db01338a56a6bec5fb2a41487 100644
--- a/src/bias/BiasValue.cpp
+++ b/src/bias/BiasValue.cpp
@@ -81,7 +81,7 @@ PRINT ARG=t,cos,sin,d.x,d.y,d.z,mycos,mysin,cc.bias.vv1 STRIDE=1 FILE=colvar FMT
 
 class BiasValue : public Bias{
 public:
-  BiasValue(const ActionOptions&);
+  explicit BiasValue(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/bias/ExtendedLagrangian.cpp b/src/bias/ExtendedLagrangian.cpp
index fcca8f001f4a694a0db7811503085892c1487ae8..171e92f01cefb6a3000c1c82a5c0d29b27fa5e87 100644
--- a/src/bias/ExtendedLagrangian.cpp
+++ b/src/bias/ExtendedLagrangian.cpp
@@ -129,7 +129,7 @@ class ExtendedLagrangian : public Bias{
   double kbt;
   Random rand;
 public:
-  ExtendedLagrangian(const ActionOptions&);
+  explicit ExtendedLagrangian(const ActionOptions&);
   void calculate();
   void update();
   void turnOnDerivatives();
diff --git a/src/bias/External.cpp b/src/bias/External.cpp
index 256321756e3388c58cab34d896e1c42aecb828ec..db9cfb53b3c9e95bad22da494f600762a5da8ff3 100644
--- a/src/bias/External.cpp
+++ b/src/bias/External.cpp
@@ -99,7 +99,7 @@ private:
   Grid* BiasGrid_;
   
 public:
-  External(const ActionOptions&);
+  explicit External(const ActionOptions&);
   ~External();
   void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/bias/LWalls.cpp b/src/bias/LWalls.cpp
index dbb26c8a15f36d2782f35a5b817e0e08a2f60e68..ed8dd9ef9ce0a2ab7c8204089ab050d5e9bc1f55 100644
--- a/src/bias/LWalls.cpp
+++ b/src/bias/LWalls.cpp
@@ -71,7 +71,7 @@ class LWalls : public Bias{
   std::vector<double> eps;
   std::vector<double> offset;
 public:
-  LWalls(const ActionOptions&);
+  explicit LWalls(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/bias/MetaD.cpp b/src/bias/MetaD.cpp
index 23f3259d4a7a720f36530b30ac253a6c3461e901..d0bc095ed7c7154a1cc1dc48a5c79d18d3d8c2ab 100644
--- a/src/bias/MetaD.cpp
+++ b/src/bias/MetaD.cpp
@@ -284,7 +284,7 @@ private:
   std::string fmt;
 
 public:
-  MetaD(const ActionOptions&);
+  explicit MetaD(const ActionOptions&);
   ~MetaD();
   void calculate();
   void update();
diff --git a/src/bias/MovingRestraint.cpp b/src/bias/MovingRestraint.cpp
index a4e1052b967a3c476afe86a420d39ded5ce2c0f1..6f6229d5a77df5a2082b5cb9645c78463508c8ea 100644
--- a/src/bias/MovingRestraint.cpp
+++ b/src/bias/MovingRestraint.cpp
@@ -112,7 +112,7 @@ class MovingRestraint : public Bias{
   std::vector<double> work;
   double tot_work;
 public:
-  MovingRestraint(const ActionOptions&);
+  explicit MovingRestraint(const ActionOptions&);
   void calculate();
   static void registerKeywords( Keywords& keys );
 };
diff --git a/src/bias/Restraint.cpp b/src/bias/Restraint.cpp
index a6a8af0b0452b6b4e98e38e860a339c380cb98a7..8a2e1139dc34725415f792e924b5c8cb7e0a88e6 100644
--- a/src/bias/Restraint.cpp
+++ b/src/bias/Restraint.cpp
@@ -67,7 +67,7 @@ class Restraint : public Bias{
   Value* valueBias;
   Value* valueForce2;
 public:
-  Restraint(const ActionOptions&);
+  explicit Restraint(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/bias/UWalls.cpp b/src/bias/UWalls.cpp
index bb97ea4dad86301ed34eed42b85d0a30791e07e4..6f77344bc6edf3062496451fdfbf6bf9954db048 100644
--- a/src/bias/UWalls.cpp
+++ b/src/bias/UWalls.cpp
@@ -71,7 +71,7 @@ class UWalls : public Bias{
   std::vector<double> eps;
   std::vector<double> offset;
 public:
-  UWalls(const ActionOptions&);
+  explicit UWalls(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp
index 21d7b823d9f2a59f8bb5c95fb4be6e9c0730e36f..cd27611d57d1e42ea333186053bc9fdc06bd3da7 100644
--- a/src/cltools/Driver.cpp
+++ b/src/cltools/Driver.cpp
@@ -166,7 +166,7 @@ template<typename real>
 class Driver : public CLTool {
 public:
   static void registerKeywords( Keywords& keys );
-  Driver(const CLToolOptions& co );
+  explicit Driver(const CLToolOptions& co );
   int main(FILE* in,FILE*out,Communicator& pc);
   string description()const;
 };
diff --git a/src/cltools/GenTemplate.cpp b/src/cltools/GenTemplate.cpp
index a6aab531f8c1e271c29bfc7e7549c8689001fd3c..a0f494f4b2a68725b893a61d2d8df8a3dd9ab35e 100644
--- a/src/cltools/GenTemplate.cpp
+++ b/src/cltools/GenTemplate.cpp
@@ -58,7 +58,7 @@ public CLTool
 {
 public:
   static void registerKeywords( Keywords& keys );
-  GenTemplate(const CLToolOptions& co );
+  explicit GenTemplate(const CLToolOptions& co );
   int main(FILE* in, FILE*out,Communicator& pc);
   string description()const{
     return "print out a template input for a particular action";
diff --git a/src/cltools/Info.cpp b/src/cltools/Info.cpp
index 51c9e7f95f54ac63747dd601b6ea7c54a02dd83a..9ed205ef07aaa1a707d8dada2376b6886e8008a4 100644
--- a/src/cltools/Info.cpp
+++ b/src/cltools/Info.cpp
@@ -54,7 +54,7 @@ public CLTool
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Info(const CLToolOptions& co );
+  explicit Info(const CLToolOptions& co );
   int main(FILE* in, FILE*out,Communicator& pc);
   string description()const{
     return "provide informations about plumed";
diff --git a/src/cltools/Manual.cpp b/src/cltools/Manual.cpp
index 477f8c65c1df8dbbb67fd162c729980ab52426e3..8ad567fe1d7beaccd799e4d9f083a75b3498c245 100644
--- a/src/cltools/Manual.cpp
+++ b/src/cltools/Manual.cpp
@@ -59,7 +59,7 @@ public CLTool
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Manual(const CLToolOptions& co );
+  explicit Manual(const CLToolOptions& co );
   int main(FILE* in, FILE*out,Communicator& pc);
   string description()const{
     return "print out a description of the keywords for an action in html";
diff --git a/src/cltools/SimpleMD.cpp b/src/cltools/SimpleMD.cpp
index 241acdb07610467e4312e52ee24b1ba501db54ae..614ebbf59603b37e1577469d4f508853d1a2020e 100644
--- a/src/cltools/SimpleMD.cpp
+++ b/src/cltools/SimpleMD.cpp
@@ -104,7 +104,7 @@ static void registerKeywords( Keywords& keys ){
   keys.add("compulsory","wrapatoms","false","If true, atomic coordinates are written wrapped in minimal cell");
 }
 
-SimpleMD( const CLToolOptions& co ) :
+explicit SimpleMD( const CLToolOptions& co ) :
   CLTool(co),
   write_positions_first(true),
   write_statistics_first(true),
diff --git a/src/cltools/SumHills.cpp b/src/cltools/SumHills.cpp
index 47ed3d1c03a78e6f3575a5817e7f43818f048a5f..c02388b44f93c565bb581bccff50b800f951a00a 100644
--- a/src/cltools/SumHills.cpp
+++ b/src/cltools/SumHills.cpp
@@ -189,7 +189,7 @@ that gives  myhisto_0.dat,  myhisto_1.dat,  myhisto_3.dat etc..
 class CLToolSumHills : public CLTool {
 public:
   static void registerKeywords( Keywords& keys );
-  CLToolSumHills(const CLToolOptions& co );
+  explicit CLToolSumHills(const CLToolOptions& co );
   int main(FILE* in,FILE*out,Communicator& pc);
   string description()const;
 /// find a list of variables present, if they are periodic and which is the period
diff --git a/src/cltools/kT.cpp b/src/cltools/kT.cpp
index 684c1a7411e758fcc1f774050c3ac03504f6eea1..123f4ed09013add90db9ccc0ecce0e930f2aa3f0 100644
--- a/src/cltools/kT.cpp
+++ b/src/cltools/kT.cpp
@@ -56,7 +56,7 @@ public CLTool
 {
 public:
   static void registerKeywords( Keywords& keys );
-  kt(const CLToolOptions& co );
+  explicit kt(const CLToolOptions& co );
   int main(FILE* in, FILE*out,Communicator& pc);
   string description()const{
     return "print out the value of kT at a particular temperature";
diff --git a/src/colvar/Angle.cpp b/src/colvar/Angle.cpp
index 1c2065e8cfa7289c3ce0fa4e1b305f33b65873d1..27518bea6902b16e20afe3db220b558b3692ad1e 100644
--- a/src/colvar/Angle.cpp
+++ b/src/colvar/Angle.cpp
@@ -88,7 +88,7 @@ class Angle : public Colvar {
   bool pbc;
 
 public:
-  Angle(const ActionOptions&);
+  explicit Angle(const ActionOptions&);
 // active methods:
   virtual void calculate();
   static void registerKeywords( Keywords& keys );
diff --git a/src/colvar/CH3Shifts.cpp b/src/colvar/CH3Shifts.cpp
index f8754b05c7578507385d9913361787f4561656ae..fb40b62ae54c0bcd43df9ffa929f87a082338eb0 100644
--- a/src/colvar/CH3Shifts.cpp
+++ b/src/colvar/CH3Shifts.cpp
@@ -123,7 +123,7 @@ class CH3Shifts : public Colvar {
   double len_pl2alm;
   double for_pl2alm;
 public:
-  CH3Shifts(const ActionOptions&);
+  explicit CH3Shifts(const ActionOptions&);
   ~CH3Shifts();
   static void registerKeywords( Keywords& keys );
   virtual void calculate();
diff --git a/src/colvar/CS2Backbone.cpp b/src/colvar/CS2Backbone.cpp
index e2811128f6590efd25f19786a8979d8931243029..4747462f7164cf1c3f3f7be9251e708ff9d7a1ef 100644
--- a/src/colvar/CS2Backbone.cpp
+++ b/src/colvar/CS2Backbone.cpp
@@ -135,7 +135,7 @@ class CS2Backbone : public Colvar {
   Coor<double> coor; 
   Coor<double> csforces;
 public:
-  CS2Backbone(const ActionOptions&);
+  explicit CS2Backbone(const ActionOptions&);
   ~CS2Backbone();
   static void registerKeywords( Keywords& keys );
   virtual void calculate();
diff --git a/src/colvar/Cell.cpp b/src/colvar/Cell.cpp
index f37f0a0cc1361eb13ba620fc0cbe9ae0feb29c63..6c77b53691898295b98cde3cfb195fc314f792b3 100644
--- a/src/colvar/Cell.cpp
+++ b/src/colvar/Cell.cpp
@@ -53,7 +53,7 @@ class Cell : public Colvar {
   Value* components[3][3];
 
 public:
-  Cell(const ActionOptions&);
+  explicit Cell(const ActionOptions&);
 // active methods:
   virtual void calculate();
 /// Register all the keywords for this action
diff --git a/src/colvar/Constant.cpp b/src/colvar/Constant.cpp
index 3adee8764fd50c64a8eaee91f4febad074e394c6..c9daad3c2f60291dcacea570c21dbae7297a8e93 100644
--- a/src/colvar/Constant.cpp
+++ b/src/colvar/Constant.cpp
@@ -58,7 +58,7 @@ PRINT ARG=sss.2
 class Constant : public Colvar {
   double value;
 public:
-  Constant(const ActionOptions&);
+  explicit Constant(const ActionOptions&);
 // active methods:
   virtual void calculate();
   static void registerKeywords( Keywords& keys );
diff --git a/src/colvar/ContactMap.cpp b/src/colvar/ContactMap.cpp
index 2b5d2ab2696d0f5533fb17d954588e94ba2ee34c..e9789f91676711a4702046a1833f7eea2116d1d9 100644
--- a/src/colvar/ContactMap.cpp
+++ b/src/colvar/ContactMap.cpp
@@ -81,7 +81,7 @@ private:
   vector<double> reference, weight;
 public:
   static void registerKeywords( Keywords& keys );
-  ContactMap(const ActionOptions&);
+  explicit ContactMap(const ActionOptions&);
   ~ContactMap();
 // active methods:
   virtual void calculate();
diff --git a/src/colvar/Coordination.cpp b/src/colvar/Coordination.cpp
index 83f2422a513c67759e72c3384ef2bbaf6eabc023..a2d71b8ded7054e518ad7cf9f54e61743073abb2 100644
--- a/src/colvar/Coordination.cpp
+++ b/src/colvar/Coordination.cpp
@@ -94,7 +94,7 @@ class Coordination : public CoordinationBase{
   SwitchingFunction switchingFunction;
 
 public:
-  Coordination(const ActionOptions&);
+  explicit Coordination(const ActionOptions&);
 // active methods:
   static void registerKeywords( Keywords& keys );
   virtual double pairing(double distance,double&dfunc,unsigned i,unsigned j)const;
diff --git a/src/colvar/CoordinationBase.h b/src/colvar/CoordinationBase.h
index 0e786a5e05f6b43d9a2902c4677f10d7a9f907bf..5f6ae3a7e0aab40f37aab51787654b7dc944b079 100644
--- a/src/colvar/CoordinationBase.h
+++ b/src/colvar/CoordinationBase.h
@@ -37,7 +37,7 @@ class CoordinationBase : public Colvar {
   bool firsttime;
   
 public:
-  CoordinationBase(const ActionOptions&);
+  explicit CoordinationBase(const ActionOptions&);
   ~CoordinationBase();
 // active methods:
   virtual void calculate();
diff --git a/src/colvar/DHEnergy.cpp b/src/colvar/DHEnergy.cpp
index 8bfc63b7b20bfd0e4f7852d57bac87cbe2275623..590775db3efc11952f42358cbf0c5581fd543a37 100644
--- a/src/colvar/DHEnergy.cpp
+++ b/src/colvar/DHEnergy.cpp
@@ -72,7 +72,7 @@ class DHEnergy : public CoordinationBase{
   double epsilon;
 
 public:
-  DHEnergy(const ActionOptions&);
+  explicit DHEnergy(const ActionOptions&);
 // active methods:
   static void registerKeywords( Keywords& keys );
   virtual double pairing(double distance,double&dfunc,unsigned i,unsigned j)const;
diff --git a/src/colvar/DRMSD.cpp b/src/colvar/DRMSD.cpp
index 9a41f57c5bcedfb42928716897f86e917d4f6a50..f83ade6bbd4ac829327057baf12fc7ea5992db45 100644
--- a/src/colvar/DRMSD.cpp
+++ b/src/colvar/DRMSD.cpp
@@ -82,7 +82,7 @@ class DRMSD : public Colvar {
   PLMD::DRMSD* drmsd_;
 
 public:
-  DRMSD(const ActionOptions&);
+  explicit DRMSD(const ActionOptions&);
   ~DRMSD();
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/Dipole.cpp b/src/colvar/Dipole.cpp
index efa2567dbcbf1bd834d3910fc1c87a52021b705e..28d4f1af2ecc2dc63c6fe72b64f997ed8fd17985 100644
--- a/src/colvar/Dipole.cpp
+++ b/src/colvar/Dipole.cpp
@@ -55,7 +55,7 @@ on the position) is computed on the geometric center of the group.
 class Dipole : public Colvar {
   vector<AtomNumber> ga_lista;
 public:
-  Dipole(const ActionOptions&);
+  explicit Dipole(const ActionOptions&);
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/colvar/Distance.cpp b/src/colvar/Distance.cpp
index 40fa4d76caabc34caef27a4456507e25dcd135b2..890f11a8a22d3d29b1d6b9f729d55ab27848dd32 100644
--- a/src/colvar/Distance.cpp
+++ b/src/colvar/Distance.cpp
@@ -118,7 +118,7 @@ class Distance : public Colvar {
 
 public:
   static void registerKeywords( Keywords& keys );
-  Distance(const ActionOptions&);
+  explicit Distance(const ActionOptions&);
 // active methods:
   virtual void calculate();
 };
diff --git a/src/colvar/Energy.cpp b/src/colvar/Energy.cpp
index 9b55c949bb6738f5d6c9a7ae593d3f8633b54a3e..e2f68a8695aa82a5b273b255f4e41a234e92df5c 100644
--- a/src/colvar/Energy.cpp
+++ b/src/colvar/Energy.cpp
@@ -61,7 +61,7 @@ PRINT ARG=ene
 class Energy : public Colvar {
 
 public:
-  Energy(const ActionOptions&);
+  explicit Energy(const ActionOptions&);
 // active methods:
   void prepare();
   virtual void calculate();
diff --git a/src/colvar/Fake.cpp b/src/colvar/Fake.cpp
index c7f49c56871ee8b8f1da2c4854e74f94a9fb415c..c0efb6e178dde6e52fa47f1494ab0e6f85fd0f49 100644
--- a/src/colvar/Fake.cpp
+++ b/src/colvar/Fake.cpp
@@ -51,7 +51,7 @@ class ColvarFake : public Colvar {
 
 public:
   static void registerKeywords( Keywords& keys );
-  ColvarFake(const ActionOptions&);
+  explicit ColvarFake(const ActionOptions&);
 // active methods:
   virtual void calculate();
 };
diff --git a/src/colvar/Gyration.cpp b/src/colvar/Gyration.cpp
index 8f2572a21b77a05dd558d782d19f3ced9b0a6392..21250676959c2e068242e4b2ed9374d175d81f55 100644
--- a/src/colvar/Gyration.cpp
+++ b/src/colvar/Gyration.cpp
@@ -93,7 +93,7 @@ private:
   bool nopbc;
 public:
   static void registerKeywords(Keywords& keys);
-  Gyration(const ActionOptions&);
+  explicit Gyration(const ActionOptions&);
   virtual void calculate();
 };
 
diff --git a/src/colvar/MultiRMSD.cpp b/src/colvar/MultiRMSD.cpp
index aeab313c8e158e900e4462ab31b2b83c20b3b2c1..d341dbad6405d3d4a90996724522438d911e5b83 100644
--- a/src/colvar/MultiRMSD.cpp
+++ b/src/colvar/MultiRMSD.cpp
@@ -41,7 +41,7 @@ class MultiRMSD : public Colvar {
   ReferenceValuePack mypack;
 
 public:
-  MultiRMSD(const ActionOptions&);
+  explicit MultiRMSD(const ActionOptions&);
   ~MultiRMSD();
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/NOE.cpp b/src/colvar/NOE.cpp
index 5f5e6b8870613594d2e848925b7ae685d1eaac79..4f0eb01dceb97cf8042d803aa3084c108e0dc8ef 100644
--- a/src/colvar/NOE.cpp
+++ b/src/colvar/NOE.cpp
@@ -80,7 +80,7 @@ private:
   bool             serial;
 public:
   static void registerKeywords( Keywords& keys );
-  NOE(const ActionOptions&);
+  explicit NOE(const ActionOptions&);
   ~NOE();
   virtual void calculate();
 };
diff --git a/src/colvar/PCARMSD.cpp b/src/colvar/PCARMSD.cpp
index 73321b8ff71aeedc2420699f5ecbf9ca3b355e4a..eef47281559fb88a46e1912be0a6cf4fe67eda83 100644
--- a/src/colvar/PCARMSD.cpp
+++ b/src/colvar/PCARMSD.cpp
@@ -40,7 +40,7 @@ class PCARMSD : public Colvar {
   std::vector<PDB> pdbv;
   std::vector<string> pca_names;
 public:
-  PCARMSD(const ActionOptions&);
+  explicit PCARMSD(const ActionOptions&);
   ~PCARMSD();
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/PathMSD.cpp b/src/colvar/PathMSD.cpp
index ac484f2fa4e05bc7743dd57ce1a7470bf18f3f39..b5734044aef0caa9960da595ba0ee0e568dd7f46 100644
--- a/src/colvar/PathMSD.cpp
+++ b/src/colvar/PathMSD.cpp
@@ -63,7 +63,7 @@ is shared, as well as most input options.
    
 class PathMSD : public PathMSDBase {
 public:
-  PathMSD(const ActionOptions&);
+  explicit PathMSD(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
 };
 
diff --git a/src/colvar/PathMSDBase.h b/src/colvar/PathMSDBase.h
index d4140678b605470ad6e44c088be685b35a9ebaad..f7d64b8baac46774cfcd7a14baa9d67e7f058d9a 100644
--- a/src/colvar/PathMSDBase.h
+++ b/src/colvar/PathMSDBase.h
@@ -75,7 +75,7 @@ protected:
   std::vector< std::vector<double> > indexvec; // use double to allow isomaps
   unsigned nframes;
 public:
-  PathMSDBase(const ActionOptions&);
+  explicit PathMSDBase(const ActionOptions&);
 // active methods:
   virtual void calculate();
 //  virtual void prepare();
diff --git a/src/colvar/Position.cpp b/src/colvar/Position.cpp
index 943b07e57f15450f6639b496e920cabb1dc0d093..cddd6364a61c80ff914a34263e36b55fbf70a29f 100644
--- a/src/colvar/Position.cpp
+++ b/src/colvar/Position.cpp
@@ -72,7 +72,7 @@ class Position : public Colvar {
 
 public:
   static void registerKeywords( Keywords& keys );
-  Position(const ActionOptions&);
+  explicit Position(const ActionOptions&);
 // active methods:
   virtual void calculate();
 };
diff --git a/src/colvar/PropertyMap.cpp b/src/colvar/PropertyMap.cpp
index 621d99ca638081d0f144c2990c4e54ecd7c71de0..8a417007518f3f0a49f85a9378215ed5c945df5e 100644
--- a/src/colvar/PropertyMap.cpp
+++ b/src/colvar/PropertyMap.cpp
@@ -81,7 +81,7 @@ is shared, as well as most input options.
    
 class PropertyMap : public PathMSDBase {
 public:
-  PropertyMap(const ActionOptions&);
+  explicit PropertyMap(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
 };
 
diff --git a/src/colvar/Puckering.cpp b/src/colvar/Puckering.cpp
index 9157940f6fbe1905e600b6c90484b2fe95bdd656..b39b1b920566d36ac6d159ae005b1fabf72d06ae 100644
--- a/src/colvar/Puckering.cpp
+++ b/src/colvar/Puckering.cpp
@@ -56,7 +56,7 @@ namespace colvar{
 class Puckering : public Colvar {
 
 public:
-  Puckering(const ActionOptions&);
+  explicit Puckering(const ActionOptions&);
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/colvar/RDC.cpp b/src/colvar/RDC.cpp
index c471666fad79c3aab44c01fd53b8f90dfeeb3a53..5cf65e1c07a166369a6b2f6a30cd083ca1a5b957 100644
--- a/src/colvar/RDC.cpp
+++ b/src/colvar/RDC.cpp
@@ -129,7 +129,7 @@ private:
   bool serial;
   bool svd;
 public:
-  RDC(const ActionOptions&);
+  explicit RDC(const ActionOptions&);
   static void registerKeywords( Keywords& keys );
   virtual void calculate();
 };
diff --git a/src/colvar/RMSD.cpp b/src/colvar/RMSD.cpp
index 352007ada6d74a320ed6d5869ce0604cbcea6b86..df1daf679d009a5bba05fb23813636c2f2429ac4 100644
--- a/src/colvar/RMSD.cpp
+++ b/src/colvar/RMSD.cpp
@@ -41,7 +41,7 @@ class RMSD : public Colvar {
   bool squared; 
 
 public:
-  RMSD(const ActionOptions&);
+  explicit RMSD(const ActionOptions&);
   ~RMSD();
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/Template.cpp b/src/colvar/Template.cpp
index 0bcc1030d7a5b94411b5de04bad325cb1d25e7bc..28b1443a039fdb21c1c53c07809adae69093e0aa 100644
--- a/src/colvar/Template.cpp
+++ b/src/colvar/Template.cpp
@@ -47,7 +47,7 @@ class Template : public Colvar {
   bool pbc;
 
 public:
-  Template(const ActionOptions&);
+  explicit Template(const ActionOptions&);
 // active methods:
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/Torsion.cpp b/src/colvar/Torsion.cpp
index f4e2b2fe7c1c6fd7dea5dadb3e6a396130d0e555..486774f8b2a294aef7e50f2272d72bdfb2024671 100644
--- a/src/colvar/Torsion.cpp
+++ b/src/colvar/Torsion.cpp
@@ -71,7 +71,7 @@ class Torsion : public Colvar {
   bool do_cosine;
 
 public:
-  Torsion(const ActionOptions&);
+  explicit Torsion(const ActionOptions&);
 // active methods:
   virtual void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/colvar/Volume.cpp b/src/colvar/Volume.cpp
index 951960ac4166046ef2ceffac782813a8ea332636..4f4f79c668944c91ff5ee70f529f1108d6e42c4b 100644
--- a/src/colvar/Volume.cpp
+++ b/src/colvar/Volume.cpp
@@ -49,7 +49,7 @@ PRINT ARG=vol
 class Volume : public Colvar {
 
 public:
-  Volume(const ActionOptions&);
+  explicit Volume(const ActionOptions&);
 // active methods:
   virtual void calculate();
 /// Register all the keywords for this action
diff --git a/src/core/Action.h b/src/core/Action.h
index a6ec62ecec056431e87bce241c9a5f9d09f3835b..0ae02f99669c87818ccbd831368209fe5ab6cb1f 100644
--- a/src/core/Action.h
+++ b/src/core/Action.h
@@ -157,12 +157,12 @@ public:
 
 public:
 /// Standard constructor from ActionOptions
-  Action(const ActionOptions&);
+  explicit Action(const ActionOptions&);
 /// Destructor
   virtual ~Action();
 private:
 /// Copy constructor is disabled (private and unimplemented)
-  Action(const Action&a);
+  explicit Action(const Action&a);
 /// Assignment operator is disabled (private and unimplemented)
   Action& operator=(const Action&a);
 public:
diff --git a/src/core/ActionAtomistic.h b/src/core/ActionAtomistic.h
index 2d15c2dadedf75249961e0a195127367eec3ded0..4a32b27009c02d8e7765c48bb9c5c0341f5eaa45 100644
--- a/src/core/ActionAtomistic.h
+++ b/src/core/ActionAtomistic.h
@@ -138,7 +138,7 @@ public:
 
 // virtual functions:
 
-  ActionAtomistic(const ActionOptions&ao);
+  explicit ActionAtomistic(const ActionOptions&ao);
   ~ActionAtomistic();
 
   static void registerKeywords( Keywords& keys );
diff --git a/src/core/ActionPilot.h b/src/core/ActionPilot.h
index 551c73d0b901504bf5a2c5233096406a60996e31..359e0f55ab868e7d3d7632d671507f862fffd3c7 100644
--- a/src/core/ActionPilot.h
+++ b/src/core/ActionPilot.h
@@ -43,7 +43,7 @@ class ActionPilot:
 protected:
   int getStride()const;
 public:
-  ActionPilot(const ActionOptions&);
+  explicit ActionPilot(const ActionOptions&);
 /// Create the keywords for actionPilot
   static void registerKeywords(Keywords& keys);
 /// Check if the action is active on this step
diff --git a/src/core/ActionSet.h b/src/core/ActionSet.h
index 3a29cda86fd7a8798c643bdd6858b73c6729bf3e..420ffd3faa6cfdc73881eec31b139ca263d51a24 100644
--- a/src/core/ActionSet.h
+++ b/src/core/ActionSet.h
@@ -40,7 +40,7 @@ class ActionSet:
 {
   PlumedMain& plumed;
 public:
-  ActionSet(PlumedMain&p);
+  explicit ActionSet(PlumedMain&p);
   ~ActionSet();
 /// Clear and deletes all the included pointers.
   void clearDelete();
diff --git a/src/core/ActionSetup.h b/src/core/ActionSetup.h
index d8f1412df3c8b1f3451640a51c1658524d2c7729..b0708b306f0f0e79463e2146cd5323b4ccb207d2 100644
--- a/src/core/ActionSetup.h
+++ b/src/core/ActionSetup.h
@@ -34,7 +34,7 @@ class ActionSetup :
   public virtual Action {
 public:
 /// Constructor
-  ActionSetup(const ActionOptions&ao);
+  explicit ActionSetup(const ActionOptions&ao);
 /// Creator of keywords
   static void registerKeywords( Keywords& keys ); 
 /// Do nothing.
diff --git a/src/core/ActionWithArguments.h b/src/core/ActionWithArguments.h
index feef08a6da5f054e6c3d043e1ec1ebffb81d07cd..a12bdc78a1df8f203aa262d1fba940aff45c99e3 100644
--- a/src/core/ActionWithArguments.h
+++ b/src/core/ActionWithArguments.h
@@ -69,7 +69,7 @@ public:
 /// Add forces to arguments (used in apply)
   void addForcesOnArguments( const std::vector<double>& forces );
 public:
-  ActionWithArguments(const ActionOptions&);
+  explicit ActionWithArguments(const ActionOptions&);
   virtual ~ActionWithArguments(){}
 /// Calculate the numerical derivatives
 /// N.B. only pass an ActionWithValue to this routine if you know exactly what you 
diff --git a/src/core/ActionWithValue.h b/src/core/ActionWithValue.h
index b4feadca8ddd9dc9ffb7e2b557cf3499604d9f5d..39ddbf2f4a05ac272ac20b9d60ace6f351a2f786 100644
--- a/src/core/ActionWithValue.h
+++ b/src/core/ActionWithValue.h
@@ -109,7 +109,7 @@ protected:
 /// Return a pointer to the value by name
   Value* getPntrToComponent(const std::string& name);
 public:
-  ActionWithValue(const ActionOptions&ao);
+  explicit ActionWithValue(const ActionOptions&ao);
   ~ActionWithValue();
 
 /// Register all the relevant keywords for the action  
diff --git a/src/core/ActionWithVirtualAtom.h b/src/core/ActionWithVirtualAtom.h
index 43b1ad2e3a2c698d0dc57fb2ca7f65e4ee771855..3323b5da50797db758bb2c0e4b0e358d710e63b3 100644
--- a/src/core/ActionWithVirtualAtom.h
+++ b/src/core/ActionWithVirtualAtom.h
@@ -78,7 +78,7 @@ public:
   const std::map<AtomNumber,Tensor> & getGradients()const;
 /// Return the atom id of the corresponding virtual atom
   AtomNumber getIndex()const;
-  ActionWithVirtualAtom(const ActionOptions&ao);
+  explicit ActionWithVirtualAtom(const ActionOptions&ao);
   ~ActionWithVirtualAtom();
   static void registerKeywords(Keywords& keys);
   void setGradientsIfNeeded();
diff --git a/src/core/Atoms.h b/src/core/Atoms.h
index 7da51dc06736b795b9f439ef7318f599652976e9..3318fe1f4df0cea7fc1a7b995ca8e103cada66f6 100644
--- a/src/core/Atoms.h
+++ b/src/core/Atoms.h
@@ -128,7 +128,7 @@ class Atoms
 
 public:
 
-  Atoms(PlumedMain&plumed);
+  explicit Atoms(PlumedMain&plumed);
   ~Atoms();
 
   void init();
diff --git a/src/core/CLTool.h b/src/core/CLTool.h
index ba7c440444011b5baaca1164621b39001d85c138..b434c47c13cd0c8a5479d208e19f4c4e92c09883 100644
--- a/src/core/CLTool.h
+++ b/src/core/CLTool.h
@@ -42,7 +42,7 @@ private:
   const Keywords& keys;
   static Keywords emptyKeys;
 public:
-  CLToolOptions(const std::string &name);
+  explicit CLToolOptions(const std::string &name);
   CLToolOptions(const CLToolOptions& co, const Keywords& k);
 };
 
@@ -89,7 +89,7 @@ public:
   enum {unset,commandline,ifile} inputdata;
 /// Create the help keywords 
   static void registerKeywords( Keywords& keys );
-  CLTool(const CLToolOptions& co ); 
+  explicit CLTool(const CLToolOptions& co ); 
 /// Read the arguments from the command line
   bool readInput( int argc, char**argv, FILE* in, FILE*out );
 /// virtual function mapping to the specific main for each tool
diff --git a/src/core/CLToolMain.cpp b/src/core/CLToolMain.cpp
index ef97621ecaa8070732214ca20221eaec89c35bc0..a77e2b1cc3e0df8c9a41c88ae57a173e915f2856 100644
--- a/src/core/CLToolMain.cpp
+++ b/src/core/CLToolMain.cpp
@@ -203,7 +203,7 @@ int CLToolMain::run(int argc, char **argv,FILE*in,FILE*out,Communicator& pc){
         "Commands:\n";
     fprintf(out,"%s",msg.c_str());
     for(unsigned j=0;j<availableCxx.size();++j){
-      CLTool *cl=cltoolRegister().create(availableCxx[j]);
+      CLTool *cl=cltoolRegister().create(CLToolOptions(availableCxx[j]));
       plumed_assert(cl);
       string manual=availableCxx[j]+" : "+cl->description();
       delete cl;
@@ -229,7 +229,7 @@ int CLToolMain::run(int argc, char **argv,FILE*in,FILE*out,Communicator& pc){
   string command(argv[i]);
 
   if(find(availableCxx.begin(),availableCxx.end(),command)!=availableCxx.end()){
-    CLTool *cl=cltoolRegister().create(command);
+    CLTool *cl=cltoolRegister().create(CLToolOptions(command));
     plumed_assert(cl); 
     // Read the command line options (returns false if we are just printing help)
     if( !cl->readInput( argc-i,&argv[i],in,out ) ){ delete cl; return 0; } 
diff --git a/src/core/Colvar.h b/src/core/Colvar.h
index e6a38954234ff38604cfc7abf81fc1a46850e703..d4366c474ea0381be82abc3e9f8263e2303e1ce2 100644
--- a/src/core/Colvar.h
+++ b/src/core/Colvar.h
@@ -66,7 +66,7 @@ protected:
   void           setBoxDerivativesNoPbc(Value*);
 public:
   bool checkIsEnergy(){return isEnergy;}
-  Colvar(const ActionOptions&);
+  explicit Colvar(const ActionOptions&);
   ~Colvar(){}
   static void registerKeywords( Keywords& keys );
   virtual unsigned getNumberOfDerivatives();
diff --git a/src/core/GREX.h b/src/core/GREX.h
index 0f499622356c1c776aeae221635868da8f184e6c..3d0e42f1fab223a3dac02748fe505318f3e9fdab 100644
--- a/src/core/GREX.h
+++ b/src/core/GREX.h
@@ -49,7 +49,7 @@ class GREX:
   std::string buffer;
   int myreplica;
 public:
-  GREX(PlumedMain&);
+  explicit GREX(PlumedMain&);
   ~GREX();
   void cmd(const std::string&key,void*val=NULL);
   void calculate();
diff --git a/src/core/SetupMolInfo.h b/src/core/SetupMolInfo.h
index f741e8d9da4e33d6a862ff23f9784a907c59bdd4..99088fc73e4219d4a38a85663d3e2f04fd31b696 100644
--- a/src/core/SetupMolInfo.h
+++ b/src/core/SetupMolInfo.h
@@ -43,7 +43,7 @@ private:
 public:
   ~SetupMolInfo();
   static void registerKeywords( Keywords& keys );
-  SetupMolInfo(const ActionOptions&ao);
+  explicit SetupMolInfo(const ActionOptions&ao);
   void getBackbone( std::vector<std::string>& resstrings, const std::string& fortype, std::vector< std::vector<AtomNumber> >& backbone );
   std::string getAtomName(AtomNumber a)const;
   unsigned getResidueNumber(AtomNumber a)const;
diff --git a/src/core/TargetDist.h b/src/core/TargetDist.h
index 111858ff8a3f622274f214eb407a259928bc2bf5..8bc2c90de6d5adf4ac2b3d7d082f9a373e212667 100644
--- a/src/core/TargetDist.h
+++ b/src/core/TargetDist.h
@@ -37,7 +37,7 @@ private:
   std::vector<double> target;
   Log &log;
 public:
-  TargetDist(Log& log) : log(log) {}
+  explicit TargetDist(Log& log) : log(log) {}
   void read( const PDB& pdb, std::vector<Value*> args ); 
   void read( const std::vector<double>& targ, std::vector<Value*> ar );
   double calculate( std::vector<double>& derivs );
diff --git a/src/crystallization/DFSBasic.cpp b/src/crystallization/DFSBasic.cpp
index 8412323e74d9690bb4151164794bd7f4554097b6..58f9d053b161e65813a2e0ddcf23479b83a79c6c 100644
--- a/src/crystallization/DFSBasic.cpp
+++ b/src/crystallization/DFSBasic.cpp
@@ -137,7 +137,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  DFSBasic(const ActionOptions&);
+  explicit DFSBasic(const ActionOptions&);
 ///
   void doCalculationOnCluster();
 };
diff --git a/src/crystallization/DFSClusterRadius.cpp b/src/crystallization/DFSClusterRadius.cpp
index b39fd30bc1294e2cb0f6efd9b726ffb206eb6934..d72bf626adf22f9bf2eb4dd861d4cdb06ac11e34 100644
--- a/src/crystallization/DFSClusterRadius.cpp
+++ b/src/crystallization/DFSClusterRadius.cpp
@@ -48,7 +48,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  DFSClusterDiameter(const ActionOptions&);
+  explicit DFSClusterDiameter(const ActionOptions&);
 ///
   void doCalculationOnCluster();
 ///
diff --git a/src/crystallization/DFSClustering.h b/src/crystallization/DFSClustering.h
index 09efb83f4d7d0b71dffffdda7d48665adc2175ec..3ad613abe78aafc14fa2d90342939dc13fcca929 100644
--- a/src/crystallization/DFSClustering.h
+++ b/src/crystallization/DFSClustering.h
@@ -52,7 +52,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  DFSClustering(const ActionOptions&);
+  explicit DFSClustering(const ActionOptions&);
 /// Required as we have to be able to deal with vectors
   unsigned getNumberOfQuantities();
 /// This checks whether derivatives can be computed given the base multicolvar
diff --git a/src/crystallization/DFSMaxSize.cpp b/src/crystallization/DFSMaxSize.cpp
index 877ced320d879c4e678db0aa1a7e0a517371557c..93e59f1d399e97748c8933716c1351cd13165d97 100644
--- a/src/crystallization/DFSMaxSize.cpp
+++ b/src/crystallization/DFSMaxSize.cpp
@@ -79,7 +79,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  DFSMaxCluster(const ActionOptions&);
+  explicit DFSMaxCluster(const ActionOptions&);
 ///
   void doCalculationOnCluster();
 };
diff --git a/src/crystallization/DFSNumberOfClusters.cpp b/src/crystallization/DFSNumberOfClusters.cpp
index e11f81f42dd37fb142230f9742694142cf5685b7..6db6912e0ad8eb6908c629414fb18f01aa1f4664 100644
--- a/src/crystallization/DFSNumberOfClusters.cpp
+++ b/src/crystallization/DFSNumberOfClusters.cpp
@@ -45,7 +45,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  DFSNumberOfClusters(const ActionOptions&);
+  explicit DFSNumberOfClusters(const ActionOptions&);
 ///
   void doCalculationOnCluster();
 };
diff --git a/src/crystallization/Fccubic.cpp b/src/crystallization/Fccubic.cpp
index ebcd35e396a3d702f654223f3087225a5c3c68a8..617ae7070bda514c1be1907ac83b991e9c036acd 100644
--- a/src/crystallization/Fccubic.cpp
+++ b/src/crystallization/Fccubic.cpp
@@ -50,7 +50,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  Fccubic(const ActionOptions&);
+  explicit Fccubic(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, multicolvar::AtomValuePack& myatoms ) const ; 
 /// Returns the number of coordinates of the field
diff --git a/src/crystallization/Gradient.h b/src/crystallization/Gradient.h
index 7a8b6a8e1754e029c96f05b2e51547231c990822..01f06cbd7fd32d9a6f28ee2afe2b2c8bccc305cf 100644
--- a/src/crystallization/Gradient.h
+++ b/src/crystallization/Gradient.h
@@ -40,7 +40,7 @@ private:
   std::string kerneltype;
 public:
   static void registerKeywords( Keywords& keys );
-  Gradient(const ActionOptions&);
+  explicit Gradient(const ActionOptions&);
 /// Get the number of quantities that are calculated each time
   virtual unsigned getNumberOfQuantities();
 /// Check on pbc - is it orthorhombic
diff --git a/src/crystallization/GradientVessel.cpp b/src/crystallization/GradientVessel.cpp
index 0d202c7ea7eedf1e20aca40402c7fb3da5531ae9..ff28afa4fac5ab344a19d5425bb509a250ade630 100644
--- a/src/crystallization/GradientVessel.cpp
+++ b/src/crystallization/GradientVessel.cpp
@@ -37,7 +37,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  GradientVessel( const vesselbase::VesselOptions& da );
+  explicit GradientVessel( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   void resize();
   bool calculate( const unsigned& current, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_list ) const ;
diff --git a/src/crystallization/LocalSteinhardt.h b/src/crystallization/LocalSteinhardt.h
index bd71cc6296a55a1849ba2db3dc75cabcf686eacd..bfa6ac048f1c3cf518281f7a7af4150228bd295c 100644
--- a/src/crystallization/LocalSteinhardt.h
+++ b/src/crystallization/LocalSteinhardt.h
@@ -32,7 +32,7 @@ public:
   static void registerKeywords( Keywords& keys ){
     OrientationSphere::registerKeywords(keys);
   }
-  LocalSteinhardt(const ActionOptions& ao): Action(ao), OrientationSphere(ao)
+  explicit LocalSteinhardt(const ActionOptions& ao): Action(ao), OrientationSphere(ao)
   {
      T* mc=dynamic_cast<T*>( getBaseMultiColvar(0) );
      if(!mc) error("input action is not calculating the correct vectors");
diff --git a/src/crystallization/MoleculeOrientation.cpp b/src/crystallization/MoleculeOrientation.cpp
index c47a9143593bdba079ef587cf8980d5429bcd76a..7f458d91d18ab33cff7031b7e9da2031db717c94 100644
--- a/src/crystallization/MoleculeOrientation.cpp
+++ b/src/crystallization/MoleculeOrientation.cpp
@@ -53,7 +53,7 @@ class MoleculeOrientation : public VectorMultiColvar {
 private:
 public:
   static void registerKeywords( Keywords& keys );
-  MoleculeOrientation( const ActionOptions& ao );
+  explicit MoleculeOrientation( const ActionOptions& ao );
   void calculateVector( multicolvar::AtomValuePack& myatoms ) const;
 };
 
diff --git a/src/crystallization/MoleculePlane.cpp b/src/crystallization/MoleculePlane.cpp
index e9c0c74d1dd4a282d75fc3dfdc23a6d46c6ab718..e40cc43cc3d0ad4df6bd8fdbed6df000633a58c5 100644
--- a/src/crystallization/MoleculePlane.cpp
+++ b/src/crystallization/MoleculePlane.cpp
@@ -40,7 +40,7 @@ class MoleculePlane : public VectorMultiColvar {
 private:
 public:
   static void registerKeywords( Keywords& keys );
-  MoleculePlane( const ActionOptions& ao );
+  explicit MoleculePlane( const ActionOptions& ao );
   void calculateVector( multicolvar::AtomValuePack& myatoms ) const ;
 };
 
diff --git a/src/crystallization/OrientationSphere.h b/src/crystallization/OrientationSphere.h
index 20b43cdc1571dea3580aa38a4613623667e010af..cdf5b6ac2dd0fc66d5b0c88678916dafe5df9ae5 100644
--- a/src/crystallization/OrientationSphere.h
+++ b/src/crystallization/OrientationSphere.h
@@ -37,7 +37,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  OrientationSphere(const ActionOptions&);
+  explicit OrientationSphere(const ActionOptions&);
   double compute( const unsigned& tindex, multicolvar::AtomValuePack& myatoms ) const ;
   virtual double transformDotProduct( const double& dot, double& df ) const ;
   virtual double calculateCoordinationPrefactor( const double& coord, double& df ) const ;
diff --git a/src/crystallization/Q3.cpp b/src/crystallization/Q3.cpp
index ab47f2634305bffbda7c84c5ad87853901398142..033d6d407872c9d9671fd653aed05774ac0dc8ce 100644
--- a/src/crystallization/Q3.cpp
+++ b/src/crystallization/Q3.cpp
@@ -171,7 +171,7 @@ namespace crystallization {
 class Q3 : public Steinhardt {
 public:
   static void registerKeywords( Keywords& keys );
-  Q3( const ActionOptions& ao );
+  explicit Q3( const ActionOptions& ao );
 };
 
 PLUMED_REGISTER_ACTION(Q3,"Q3")
diff --git a/src/crystallization/Q4.cpp b/src/crystallization/Q4.cpp
index 7f8fc527758caf2c2a5a5a8404a96024fd4dbef7..17a370dfd1424c72607145a8a36505a76a600f99 100644
--- a/src/crystallization/Q4.cpp
+++ b/src/crystallization/Q4.cpp
@@ -170,7 +170,7 @@ namespace crystallization {
 class Q4 : public Steinhardt {
 public:
   static void registerKeywords( Keywords& keys );
-  Q4( const ActionOptions& ao );
+  explicit Q4( const ActionOptions& ao );
 };
 
 PLUMED_REGISTER_ACTION(Q4,"Q4")
diff --git a/src/crystallization/Q6.cpp b/src/crystallization/Q6.cpp
index 49bcdf1d7953ecb17d0eee10f043f4c8efbaf874..169f07749418916c6063f688c9ded5f30a621d42 100644
--- a/src/crystallization/Q6.cpp
+++ b/src/crystallization/Q6.cpp
@@ -170,7 +170,7 @@ namespace crystallization {
 class Q6 : public Steinhardt {
 public:
   static void registerKeywords( Keywords& keys );
-  Q6( const ActionOptions& ao );
+  explicit Q6( const ActionOptions& ao );
 };
 
 PLUMED_REGISTER_ACTION(Q6,"Q6")
diff --git a/src/crystallization/SMAC.cpp b/src/crystallization/SMAC.cpp
index bb0bdd5dd436569bfeef099464fcc3b6f3153312..bb875cd3e506f01e7ec4f3c6dc2a3f2271cf5533 100644
--- a/src/crystallization/SMAC.cpp
+++ b/src/crystallization/SMAC.cpp
@@ -32,7 +32,7 @@ private:
   SwitchingFunction coord_switch;
 public:
   static void registerKeywords( Keywords& keys ); 
-  SMAC(const ActionOptions& ao); 
+  explicit SMAC(const ActionOptions& ao); 
   double transformDotProduct( const double& dot, double& df ) const ; 
   double calculateCoordinationPrefactor( const double& coord, double& df ) const ;
 };
diff --git a/src/crystallization/SimpleCubic.cpp b/src/crystallization/SimpleCubic.cpp
index 24ef1e889162415d30a004f6ce00528a8f377afe..3bb23d476da60cc10636d0b8f2d0bdadeb0ffe06 100644
--- a/src/crystallization/SimpleCubic.cpp
+++ b/src/crystallization/SimpleCubic.cpp
@@ -62,7 +62,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  SimpleCubic(const ActionOptions&);
+  explicit SimpleCubic(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, multicolvar::AtomValuePack& myatoms ) const ; 
 /// Returns the number of coordinates of the field
diff --git a/src/crystallization/Steinhardt.h b/src/crystallization/Steinhardt.h
index 906f98a374039338a6baf553a6b0b060f077158d..ac666c9f79f160afc3db99b78cb04fb531d308a6 100644
--- a/src/crystallization/Steinhardt.h
+++ b/src/crystallization/Steinhardt.h
@@ -40,7 +40,7 @@ protected:
   void setAngularMomentum( const unsigned& ang );
 public:
   static void registerKeywords( Keywords& keys );
-  Steinhardt( const ActionOptions& ao );
+  explicit Steinhardt( const ActionOptions& ao );
   void calculateVector( multicolvar::AtomValuePack& myatoms ) const ;
   double deriv_poly( const unsigned&, const double&, double& ) const ;
 };
diff --git a/src/crystallization/Tetrahedral.cpp b/src/crystallization/Tetrahedral.cpp
index 0c07b22e8e9c4b3aac5019cbfe0c776471835892..cb1f09d4084cb98dd87bd7cc22eacadbaed81043 100644
--- a/src/crystallization/Tetrahedral.cpp
+++ b/src/crystallization/Tetrahedral.cpp
@@ -82,7 +82,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  Tetrahedral(const ActionOptions&);
+  explicit Tetrahedral(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, multicolvar::AtomValuePack& myatoms ) const ; 
 /// Returns the number of coordinates of the field
diff --git a/src/crystallization/VectorMean.cpp b/src/crystallization/VectorMean.cpp
index 9404345132b5a029529074ddd8af293b029ec7eb..081fdffc7c9a5c844152dce23778489ce9a2b4ff 100644
--- a/src/crystallization/VectorMean.cpp
+++ b/src/crystallization/VectorMean.cpp
@@ -32,7 +32,7 @@ class VectorMean : public vesselbase::FunctionVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  VectorMean( const vesselbase::VesselOptions& da );
+  explicit VectorMean( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   void resize();
   bool calculate( const unsigned& current, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_list ) const ;
diff --git a/src/crystallization/VectorMultiColvar.h b/src/crystallization/VectorMultiColvar.h
index 37db089aa83b4632c155717a30c34b08ae867bd0..247d9acb6b3a2638690ffbbcbc74764e80420c68 100644
--- a/src/crystallization/VectorMultiColvar.h
+++ b/src/crystallization/VectorMultiColvar.h
@@ -48,7 +48,7 @@ protected:
   void addForcesOnAtoms( const std::vector<double>& inforces );
 public:
   static void registerKeywords( Keywords& keys );
-  VectorMultiColvar(const ActionOptions&);
+  explicit VectorMultiColvar(const ActionOptions&);
   ~VectorMultiColvar(){}
 /// The norm of a vector is not periodic
   virtual bool isPeriodic(){ return false; }
diff --git a/src/crystallization/VectorSum.cpp b/src/crystallization/VectorSum.cpp
index 2c0f6dfa7c4554cf0cb16ec0996b426bc25bb806..49caf038cc1726a7884fbf27ab25bd075d323edd 100644
--- a/src/crystallization/VectorSum.cpp
+++ b/src/crystallization/VectorSum.cpp
@@ -32,7 +32,7 @@ class VectorSum : public vesselbase::FunctionVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  VectorSum( const vesselbase::VesselOptions& da );
+  explicit VectorSum( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   void resize();
   bool calculate( const unsigned& current, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_list ) const ;
diff --git a/src/function/Combine.cpp b/src/function/Combine.cpp
index 0c46d83508ed106095a172e5c73e5cbbc781d2b9..fce4e1682c9595b73bb7a9f34f86498dc9af7836 100644
--- a/src/function/Combine.cpp
+++ b/src/function/Combine.cpp
@@ -66,7 +66,7 @@ class Combine :
   std::vector<double> coefficients;
   std::vector<double> powers;
 public:
-  Combine(const ActionOptions&);
+  explicit Combine(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/function/Ensemble.cpp b/src/function/Ensemble.cpp
index 172f467b998e135163739e40b532a3b53aa07808..b5b0cc5d517fd488348ed517a50bde32bc02eaa3 100644
--- a/src/function/Ensemble.cpp
+++ b/src/function/Ensemble.cpp
@@ -58,7 +58,7 @@ class Ensemble :
   unsigned  ens_dim;
   double    fact;
 public:
-  Ensemble(const ActionOptions&);
+  explicit Ensemble(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/function/FuncPathMSD.cpp b/src/function/FuncPathMSD.cpp
index e42eb38adff82049bf2ad25837d0a34a8a9a5eab..c66ebe99bff7641dbf03dc7c6fa136b60593819d 100644
--- a/src/function/FuncPathMSD.cpp
+++ b/src/function/FuncPathMSD.cpp
@@ -141,7 +141,7 @@ struct pairordering {
 };
 
 public:
-  FuncPathMSD(const ActionOptions&);
+  explicit FuncPathMSD(const ActionOptions&);
 // active methods:
   virtual void calculate();
   virtual void prepare();
diff --git a/src/function/FuncSumHills.cpp b/src/function/FuncSumHills.cpp
index 0db4ce6c29a097e592a9b0e7dd98c58849af99d5..662a221c79a8608d4478f7308027208f0734adfa 100644
--- a/src/function/FuncSumHills.cpp
+++ b/src/function/FuncSumHills.cpp
@@ -193,7 +193,7 @@ class FuncSumHills :
   BiasRepresentation *biasrep;
   BiasRepresentation *historep;
 public:
-  FuncSumHills(const ActionOptions&);
+  explicit FuncSumHills(const ActionOptions&);
   ~FuncSumHills();
   void calculate(); // this probably is not needed
   bool checkFilesAreExisting(const vector<string> & hills ); 
diff --git a/src/function/Function.h b/src/function/Function.h
index 6379cd9af9f10b77bb79aec9bd4ec5b8955df411..e4da4685bd971bdaff9696003c72ec1f54cf7caa 100644
--- a/src/function/Function.h
+++ b/src/function/Function.h
@@ -44,7 +44,7 @@ protected:
   void addValueWithDerivatives();
   void addComponentWithDerivatives( const std::string& name ); 
 public:
-  Function(const ActionOptions&);
+  explicit Function(const ActionOptions&);
   virtual ~Function(){}
   void apply();
   static void registerKeywords(Keywords&);
diff --git a/src/function/Matheval.cpp b/src/function/Matheval.cpp
index 77a56d6f3b7b45b9f5f0ff5808e40b1a54054dbd..c0aaf7c9bf0c04da38b5b96860dd0e1c69397da8 100644
--- a/src/function/Matheval.cpp
+++ b/src/function/Matheval.cpp
@@ -103,7 +103,7 @@ class Matheval :
   vector<double> values;
   vector<char*> names;
 public:
-  Matheval(const ActionOptions&);
+  explicit Matheval(const ActionOptions&);
   ~Matheval();
   void calculate();
   static void registerKeywords(Keywords& keys);
diff --git a/src/function/Piecewise.cpp b/src/function/Piecewise.cpp
index a89837be76fa205737b2c58685d817b544aa6414..1522bee224301f9085a5e6d899bf634a04619575 100644
--- a/src/function/Piecewise.cpp
+++ b/src/function/Piecewise.cpp
@@ -75,7 +75,7 @@ class Piecewise :
 {
   std::vector<std::pair<double,double> > points;
 public:
-  Piecewise(const ActionOptions&);
+  explicit Piecewise(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/function/Sort.cpp b/src/function/Sort.cpp
index 9bc0cafe9a87bdd57d7c45e4861d824ab0a056f9..4bd763864538775bc4cff402a5f12a25f3f83832 100644
--- a/src/function/Sort.cpp
+++ b/src/function/Sort.cpp
@@ -61,7 +61,7 @@ class Sort :
   public Function
 {
 public:
-  Sort(const ActionOptions&);
+  explicit Sort(const ActionOptions&);
   void calculate();
   static void registerKeywords(Keywords& keys);
 };
diff --git a/src/function/Target.cpp b/src/function/Target.cpp
index e0a9de726445e6733fc0335c7392dbfebc2f528c..b1084025c24b78800605f5fc1b3c3ebc51e4a24f 100644
--- a/src/function/Target.cpp
+++ b/src/function/Target.cpp
@@ -49,7 +49,7 @@ private:
   ReferenceValuePack mypack;
   PLMD::ArgumentOnlyDistance* target;
 public:
-  Target(const ActionOptions&);
+  explicit Target(const ActionOptions&);
   ~Target();
   virtual void calculate();
   static void registerKeywords(Keywords& keys );
diff --git a/src/generic/Debug.cpp b/src/generic/Debug.cpp
index 89a83364c7497d3896e23a6aabbe2afe3493cd8d..dc27ec166cd6d23385c19fd8adecd02edc25c45c 100644
--- a/src/generic/Debug.cpp
+++ b/src/generic/Debug.cpp
@@ -54,7 +54,7 @@ class Debug:
   bool novirial;
   bool detailedTimers;
 public:
-  Debug(const ActionOptions&ao);
+  explicit Debug(const ActionOptions&ao);
 /// Register all the relevant keywords for the action  
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/generic/DumpAtoms.cpp b/src/generic/DumpAtoms.cpp
index 0c79ce1862752a08d89fb704c42957f486e2ea84..7e2830dbd213a4752bac4e027c0fe6d94a0deb81 100644
--- a/src/generic/DumpAtoms.cpp
+++ b/src/generic/DumpAtoms.cpp
@@ -112,7 +112,7 @@ class DumpAtoms:
   XDRFILE* xd;
 #endif
 public:
-  DumpAtoms(const ActionOptions&);
+  explicit DumpAtoms(const ActionOptions&);
   ~DumpAtoms();
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/generic/DumpDerivatives.cpp b/src/generic/DumpDerivatives.cpp
index 4fdb1d050a0507169008f3f1ea1770d0fed05c04..5af7dfa8a2df2397656809e2ae863b96f9ad8e0a 100644
--- a/src/generic/DumpDerivatives.cpp
+++ b/src/generic/DumpDerivatives.cpp
@@ -62,7 +62,7 @@ public ActionWithArguments
   OFile of;
 public:
   void calculate(){}
-  DumpDerivatives(const ActionOptions&);
+  explicit DumpDerivatives(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
   void apply(){}
   void update();
diff --git a/src/generic/DumpForces.cpp b/src/generic/DumpForces.cpp
index 22202a9b6849ea43ca637e56c49f3f2b4e3799f2..7ec8822c778b9dd8729e73a541d557fda32cf6bd 100644
--- a/src/generic/DumpForces.cpp
+++ b/src/generic/DumpForces.cpp
@@ -61,7 +61,7 @@ public ActionWithArguments
   OFile of;
 public:
   void calculate(){}
-  DumpForces(const ActionOptions&);
+  explicit DumpForces(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
   void apply(){}
   void update();
diff --git a/src/generic/DumpMassCharge.cpp b/src/generic/DumpMassCharge.cpp
index 9e4446e6880d1859ff5db03481c0318f75b36f09..a28d2cfd415dd05a1b7f4068a772acd74ea57242 100644
--- a/src/generic/DumpMassCharge.cpp
+++ b/src/generic/DumpMassCharge.cpp
@@ -97,7 +97,7 @@ class DumpMassCharge:
   string file;
   bool first;
 public:
-  DumpMassCharge(const ActionOptions&);
+  explicit DumpMassCharge(const ActionOptions&);
   ~DumpMassCharge();
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/generic/DumpProjections.cpp b/src/generic/DumpProjections.cpp
index a13c18f7a9784ef20d5666d68b99844309248748..7a639964b117a38ec9aebadbdff3a91756aff6be 100644
--- a/src/generic/DumpProjections.cpp
+++ b/src/generic/DumpProjections.cpp
@@ -46,7 +46,7 @@ public ActionWithArguments
   OFile of;
 public:
   void calculate(){}
-  DumpProjections(const ActionOptions&);
+  explicit DumpProjections(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
   void apply(){}
   void update();
diff --git a/src/generic/EffectiveEnergyDrift.cpp b/src/generic/EffectiveEnergyDrift.cpp
index 042e9837967c0eb375665534fca4a06b5686131b..7ac256be18ea67a6af53b92792a827d7ee826f85 100644
--- a/src/generic/EffectiveEnergyDrift.cpp
+++ b/src/generic/EffectiveEnergyDrift.cpp
@@ -108,7 +108,7 @@ public ActionPilot{
   bool isFirstStep;
 
 public:
-  EffectiveEnergyDrift(const ActionOptions&);
+  explicit EffectiveEnergyDrift(const ActionOptions&);
   ~EffectiveEnergyDrift();
 
   static void registerKeywords( Keywords& keys );
diff --git a/src/generic/FitToTemplate.cpp b/src/generic/FitToTemplate.cpp
index 035e6a740af91c1477060101027915b87b376fb0..20c6683c5b14b3f8792365310494126c16131998 100644
--- a/src/generic/FitToTemplate.cpp
+++ b/src/generic/FitToTemplate.cpp
@@ -96,7 +96,7 @@ class FitToTemplate:
   Vector center;
   Vector shift;
 public:
-  FitToTemplate(const ActionOptions&ao);
+  explicit FitToTemplate(const ActionOptions&ao);
   static void registerKeywords( Keywords& keys );
   void calculate();
   void apply();
diff --git a/src/generic/Flush.cpp b/src/generic/Flush.cpp
index d5341954391aa9d60bb2d8aef10363991dd080c0..ab8eba2281254cdccd03378f500472f0ca3b9548 100644
--- a/src/generic/Flush.cpp
+++ b/src/generic/Flush.cpp
@@ -59,7 +59,7 @@ class Flush:
   public ActionPilot
 {
 public:
-  Flush(const ActionOptions&ao):
+  explicit Flush(const ActionOptions&ao):
     Action(ao),
     ActionPilot(ao)
   {
diff --git a/src/generic/Group.cpp b/src/generic/Group.cpp
index 1e4b539b2e9b10418bee55e15407672b5dfc1a36..372e9c86d6b4c8c7bf63a90fc491f9bb6be65974 100644
--- a/src/generic/Group.cpp
+++ b/src/generic/Group.cpp
@@ -123,7 +123,7 @@ class Group:
 {
 
 public:
-  Group(const ActionOptions&ao);
+  explicit Group(const ActionOptions&ao);
   ~Group();
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/generic/Include.cpp b/src/generic/Include.cpp
index 183d0f4ebc178b0d010e51a576f51f5d83e4b585..ae3f216fb8f31edc412d3a68fa0ec5ff9cab3f51 100644
--- a/src/generic/Include.cpp
+++ b/src/generic/Include.cpp
@@ -68,7 +68,7 @@ class Include :
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Include(const ActionOptions&ao);
+  explicit Include(const ActionOptions&ao);
   void calculate(){}
   void apply(){}
 };
diff --git a/src/generic/Print.cpp b/src/generic/Print.cpp
index a9cb239903ee908d3411b2d8ea4c9be6bb8d48c6..b1bd026f5f074c48fa4fa9dee157403225d8cb17 100644
--- a/src/generic/Print.cpp
+++ b/src/generic/Print.cpp
@@ -71,7 +71,7 @@ public ActionWithArguments
 public:
   void calculate(){}
   void prepare();
-  Print(const ActionOptions&);
+  explicit Print(const ActionOptions&);
   static void registerKeywords(Keywords& keys);
   void apply(){}
   void update();
diff --git a/src/generic/RandomExchanges.cpp b/src/generic/RandomExchanges.cpp
index 9dc089c1b25c3ab12f76dc189a1a4d44b7280781..b971e15ba795cf90c6fc2ee0b50b083aec73d91e 100644
--- a/src/generic/RandomExchanges.cpp
+++ b/src/generic/RandomExchanges.cpp
@@ -77,7 +77,7 @@ class RandomExchanges:
 {
 public:
   static void registerKeywords( Keywords& keys );
-  RandomExchanges(const ActionOptions&ao);
+  explicit RandomExchanges(const ActionOptions&ao);
   void calculate(){}
   void apply(){}
 };
diff --git a/src/generic/Read.cpp b/src/generic/Read.cpp
index 6444d7da35cab7c2f3406ea5ab18a30ec911e8cf..80930b3407dd4077fb2d7d51328aa9e1b5d692a3 100644
--- a/src/generic/Read.cpp
+++ b/src/generic/Read.cpp
@@ -74,7 +74,7 @@ private:
   std::vector<Value*> readvals;
 public:
   static void registerKeywords( Keywords& keys );
-  Read(const ActionOptions&);
+  explicit Read(const ActionOptions&);
   ~Read();
   void prepare();
   void apply(){}
diff --git a/src/generic/Time.cpp b/src/generic/Time.cpp
index df799928c04528fe89b9f22927838d6bd3c5b5de..6660b9b03d8a2d6ab8716fa97369d630c6efa2d6 100644
--- a/src/generic/Time.cpp
+++ b/src/generic/Time.cpp
@@ -47,7 +47,7 @@ PRINT ARG=t1
 class Time : public ActionWithValue {
 public:
   static void registerKeywords( Keywords& keys );
-  Time(const ActionOptions&);
+  explicit Time(const ActionOptions&);
 // active methods:
   virtual void calculate();
   virtual void apply(){}
diff --git a/src/generic/WholeMolecules.cpp b/src/generic/WholeMolecules.cpp
index 6495cc672fd724c32b287cec6a1f3484c30c50e1..b7f277bd49f635dacc3e574574fc6b9ec241939b 100644
--- a/src/generic/WholeMolecules.cpp
+++ b/src/generic/WholeMolecules.cpp
@@ -109,7 +109,7 @@ class WholeMolecules:
 {
   vector<vector<AtomNumber> > groups;
 public:
-  WholeMolecules(const ActionOptions&ao);
+  explicit WholeMolecules(const ActionOptions&ao);
   static void registerKeywords( Keywords& keys );
   void calculate();
   void apply(){}
diff --git a/src/generic/WrapAround.cpp b/src/generic/WrapAround.cpp
index d17901a5f8fd18eee2158f3512430058a93ef40d..f0e308e12aec9d402a189b84ba0c6c238a90ee14 100644
--- a/src/generic/WrapAround.cpp
+++ b/src/generic/WrapAround.cpp
@@ -160,7 +160,7 @@ class WrapAround:
   vector<AtomNumber> reference;
   unsigned groupby;
 public:
-  WrapAround(const ActionOptions&ao);
+  explicit WrapAround(const ActionOptions&ao);
   static void registerKeywords( Keywords& keys );
   void calculate();
   void apply(){}
diff --git a/src/imd/ActionIMD.cpp b/src/imd/ActionIMD.cpp
index 488dbcb00f23b1250fd97ab71ef40b4c3965e598..7fd6a08d2607dc4ac64c89df98f22a234abf848d 100644
--- a/src/imd/ActionIMD.cpp
+++ b/src/imd/ActionIMD.cpp
@@ -84,7 +84,7 @@ public:
   static void registerKeywords( Keywords& keys );
   void calculate();
   void apply();
-  IMD(const ActionOptions&);
+  explicit IMD(const ActionOptions&);
   ~IMD(){};
 };
 
diff --git a/src/manyrestraints/ManyRestraintsBase.h b/src/manyrestraints/ManyRestraintsBase.h
index 2cf2b38eefb2f62c2c17c6112a43a2fc0e9dc79d..e13d2775ba90dd6e88f02fc94898c96aea9c7df5 100644
--- a/src/manyrestraints/ManyRestraintsBase.h
+++ b/src/manyrestraints/ManyRestraintsBase.h
@@ -42,7 +42,7 @@ private:
   vesselbase::ActionWithVessel* aves;
 public:
   static void registerKeywords( Keywords& keys );
-  ManyRestraintsBase(const ActionOptions&);
+  explicit ManyRestraintsBase(const ActionOptions&);
   bool isPeriodic(){ return false; }
   unsigned getNumberOfDerivatives();
 /// Routines that have to be defined so as not to have problems with virtual methods
diff --git a/src/manyrestraints/UWalls.cpp b/src/manyrestraints/UWalls.cpp
index 0fda53ec788da377f11c9e87e0cd161a1544b6c3..b76f1213afd3b553e953fd4b67979f1313f0c680 100644
--- a/src/manyrestraints/UWalls.cpp
+++ b/src/manyrestraints/UWalls.cpp
@@ -68,7 +68,7 @@ private:
   double offset;
 public:
   static void registerKeywords( Keywords& keys );
-  UWalls( const ActionOptions& );
+  explicit UWalls( const ActionOptions& );
   double calcPotential( const double& val, double& df ) const ;
 };
 
diff --git a/src/mapping/Mapping.h b/src/mapping/Mapping.h
index 855f91576493e33c257dc8eb3b67b2d9d335b5b3..4891a5932a76685e2bbf693c21018b8bf46614c4 100644
--- a/src/mapping/Mapping.h
+++ b/src/mapping/Mapping.h
@@ -65,7 +65,7 @@ protected:
   ReferenceConfiguration* getReferenceConfiguration( const unsigned& ifunc );
 public:
   static void registerKeywords( Keywords& keys );
-  Mapping(const ActionOptions&);
+  explicit Mapping(const ActionOptions&);
   ~Mapping();
 /// Overload the virtual functions that appear in both ActionAtomistic and ActionWithArguments
   void turnOnDerivatives();
diff --git a/src/mapping/PCAVars.cpp b/src/mapping/PCAVars.cpp
index aaf1ad0d183b6047fcbbd45b4a2721749885ca4c..d06fd3a2d65487f093a8d660f1a60c400676e51d 100644
--- a/src/mapping/PCAVars.cpp
+++ b/src/mapping/PCAVars.cpp
@@ -184,7 +184,7 @@ private:
   std::vector<double> forces, forcesToApply;
 public:
   static void registerKeywords( Keywords& keys );
-  PCAVars(const ActionOptions&);
+  explicit PCAVars(const ActionOptions&);
   ~PCAVars();
   unsigned getNumberOfDerivatives();
   void lockRequests();
diff --git a/src/mapping/Path.cpp b/src/mapping/Path.cpp
index 51fa4f81f8b638b06dce0f693c13c4119a66028a..bcbc301914f72ab6e476159c34c92b2e75bf00a2 100644
--- a/src/mapping/Path.cpp
+++ b/src/mapping/Path.cpp
@@ -58,7 +58,7 @@ namespace mapping{
 class Path : public PathBase {
 public:
   static void registerKeywords( Keywords& keys );
-  Path(const ActionOptions&);
+  explicit Path(const ActionOptions&);
 };
 
 PLUMED_REGISTER_ACTION(Path,"PATH")
diff --git a/src/mapping/PathBase.h b/src/mapping/PathBase.h
index da36cd41ab7845a45d701e0bb044661362ad815c..0ae402810dc5f43307efd4b71eab7699d55eab50 100644
--- a/src/mapping/PathBase.h
+++ b/src/mapping/PathBase.h
@@ -32,7 +32,7 @@ private:
   double lambda;
 public:
   static void registerKeywords( Keywords& keys );
-  PathBase(const ActionOptions&);
+  explicit PathBase(const ActionOptions&);
   double getLambda();
   void calculate();
   void performTask( const unsigned& , const unsigned& , MultiValue& ) const ;
diff --git a/src/mapping/PropertyMap.cpp b/src/mapping/PropertyMap.cpp
index 8c82d6396e23052f1d9948889f74f16e2fc9c327..15d9a2de6d7d89b5b81e544ee98d9b0025ae880c 100644
--- a/src/mapping/PropertyMap.cpp
+++ b/src/mapping/PropertyMap.cpp
@@ -51,7 +51,7 @@ namespace mapping{
 class PropertyMap : public PathBase {
 public:
   static void registerKeywords( Keywords& keys );
-  PropertyMap(const ActionOptions&);
+  explicit PropertyMap(const ActionOptions&);
 };
 
 PLUMED_REGISTER_ACTION(PropertyMap,"GPROPERTYMAP")
diff --git a/src/mapping/SpathVessel.cpp b/src/mapping/SpathVessel.cpp
index 6a3a6c7b4ca08e2706cac8259adf9c00067cae03..b06e3b66d92af125c23aa214f71c3292486c2949 100644
--- a/src/mapping/SpathVessel.cpp
+++ b/src/mapping/SpathVessel.cpp
@@ -34,7 +34,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  SpathVessel( const vesselbase::VesselOptions& da );
+  explicit SpathVessel( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   void prepare();
   bool calculate( const unsigned& current, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_index ) const ;
diff --git a/src/mapping/ZpathVessel.cpp b/src/mapping/ZpathVessel.cpp
index d10d5e5a9111d2ae071b8059fb7d129308992953..f492a5066963eaa3f6085a9d0cd63ff6a9e6d0c5 100644
--- a/src/mapping/ZpathVessel.cpp
+++ b/src/mapping/ZpathVessel.cpp
@@ -32,7 +32,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  ZpathVessel( const vesselbase::VesselOptions& da );
+  explicit ZpathVessel( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double finalTransform( const double& val, double& dv );
diff --git a/src/multicolvar/ActionVolume.h b/src/multicolvar/ActionVolume.h
index e8c209e6cd2d3df6f2f51bdcc80b8895186b9913..1171179ae42fec246634ba2a02c20241ad250271 100644
--- a/src/multicolvar/ActionVolume.h
+++ b/src/multicolvar/ActionVolume.h
@@ -50,7 +50,7 @@ protected:
   std::string getKernelType() const ;
 public:
   static void registerKeywords( Keywords& keys );
-  ActionVolume(const ActionOptions&);
+  explicit ActionVolume(const ActionOptions&);
 /// Get the number of quantities that are calculated each time
   virtual unsigned getNumberOfQuantities();
 /// Calculate whats in the volume
diff --git a/src/multicolvar/AdjacencyMatrixAction.h b/src/multicolvar/AdjacencyMatrixAction.h
index 39a96a3a672eb180ec5bd02cb94e916d4fe78dec..6cf1b667d2942d2f0e243a559b39a2b4ed2485d1 100644
--- a/src/multicolvar/AdjacencyMatrixAction.h
+++ b/src/multicolvar/AdjacencyMatrixAction.h
@@ -63,7 +63,7 @@ protected:
   void addDerivativesOnMatrixElement( const unsigned& ielem, const unsigned& jrow, const double& df, Matrix<double>& der );
 public:
   static void registerKeywords( Keywords& keys );
-  AdjacencyMatrixAction(const ActionOptions&);
+  explicit AdjacencyMatrixAction(const ActionOptions&);
   double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   void calculateWeight( AtomValuePack& myatoms ) const ;
   void doJobsRequiredBeforeTaskList();
diff --git a/src/multicolvar/AdjacencyMatrixVessel.h b/src/multicolvar/AdjacencyMatrixVessel.h
index 1d1f12d293b7afd33e84b2e103caf49ceaf510e7..373d390d8b8ee33b7ba17b80fb7ea574ef9696d0 100644
--- a/src/multicolvar/AdjacencyMatrixVessel.h
+++ b/src/multicolvar/AdjacencyMatrixVessel.h
@@ -39,7 +39,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  AdjacencyMatrixVessel( const vesselbase::VesselOptions& );
+  explicit AdjacencyMatrixVessel( const vesselbase::VesselOptions& );
 /// Ensures we use less memory for buffer in final loop
   void setBufferStart( unsigned& start );
 /// Ensures that finish is set properly
diff --git a/src/multicolvar/AlphaBeta.cpp b/src/multicolvar/AlphaBeta.cpp
index b203e5b55d79f26b5799fcf7db668aa977869719..4e332d8273347b67b169862090c54906c4f93db1 100644
--- a/src/multicolvar/AlphaBeta.cpp
+++ b/src/multicolvar/AlphaBeta.cpp
@@ -97,7 +97,7 @@ private:
   std::vector<double> target;
 public:
   static void registerKeywords( Keywords& keys );
-  AlphaBeta(const ActionOptions&);
+  explicit AlphaBeta(const ActionOptions&);
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   bool isPeriodic(){ return false; }
 };
diff --git a/src/multicolvar/Angles.cpp b/src/multicolvar/Angles.cpp
index 2acaf5a32d222fbaaae883a8557294741a8009d2..cf108fd5e92e85de7f31a999f64f436d483c79d0 100644
--- a/src/multicolvar/Angles.cpp
+++ b/src/multicolvar/Angles.cpp
@@ -91,7 +91,7 @@ private:
   SwitchingFunction sf2;
 public:
   static void registerKeywords( Keywords& keys );
-  Angles(const ActionOptions&);
+  explicit Angles(const ActionOptions&);
 /// Updates neighbor list
   virtual double compute( const unsigned& tindex, AtomValuePack& ) const ;
 /// Returns the number of coordinates of the field
diff --git a/src/multicolvar/Bridge.cpp b/src/multicolvar/Bridge.cpp
index 0e1e95a13127eefad2a55c18f73376ff6e1fc876..4148cacb0594ea04734d4d09af5e46448509c1a8 100644
--- a/src/multicolvar/Bridge.cpp
+++ b/src/multicolvar/Bridge.cpp
@@ -66,7 +66,7 @@ private:
   SwitchingFunction sf2;
 public:
   static void registerKeywords( Keywords& keys );
-  Bridge(const ActionOptions&);
+  explicit Bridge(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   void calculateWeight( AtomValuePack& myatoms ) const ;
diff --git a/src/multicolvar/BridgedMultiColvarFunction.h b/src/multicolvar/BridgedMultiColvarFunction.h
index b54a3779cd3b90d41d4379416d5b9469a2fbea1c..639c4ab355a4ea0d5f084b0f4a1bc8861e197ba5 100644
--- a/src/multicolvar/BridgedMultiColvarFunction.h
+++ b/src/multicolvar/BridgedMultiColvarFunction.h
@@ -48,7 +48,7 @@ protected:
   void setAtomActive( const unsigned& n );
 public:
   static void registerKeywords( Keywords& keys );
-  BridgedMultiColvarFunction(const ActionOptions&);
+  explicit BridgedMultiColvarFunction(const ActionOptions&);
 /// Get a pointer to the base multicolvar
   MultiColvarBase* getPntrToMultiColvar() const ;
 /// Don't actually clear the derivatives when this is called from plumed main.  
diff --git a/src/multicolvar/CoordinationNumbers.cpp b/src/multicolvar/CoordinationNumbers.cpp
index a87fc67130cc57e90a6e169202d65cc048be4092..ae618b6d5e357649b3a09240921d07a4f7e2005f 100644
--- a/src/multicolvar/CoordinationNumbers.cpp
+++ b/src/multicolvar/CoordinationNumbers.cpp
@@ -69,7 +69,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  CoordinationNumbers(const ActionOptions&);
+  explicit CoordinationNumbers(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ; 
 /// Returns the number of coordinates of the field
diff --git a/src/multicolvar/Density.cpp b/src/multicolvar/Density.cpp
index 32794ad573b485dabf71cbe8119380793401e4de..6d5f9c2014604985082d79debc74a81a19dfef70 100644
--- a/src/multicolvar/Density.cpp
+++ b/src/multicolvar/Density.cpp
@@ -52,7 +52,7 @@ PRINT ARG=d1.* FILE=colvar1 FMT=%8.4f
 class Density : public MultiColvar {
 public:
   static void registerKeywords( Keywords& keys );
-  Density(const ActionOptions&);
+  explicit Density(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   /// Returns the number of coordinates of the field
diff --git a/src/multicolvar/DihedralCorrelation.cpp b/src/multicolvar/DihedralCorrelation.cpp
index 14b72c4339c169c3b16acc0fcb2bb9764f313997..fce6c2a7f10f0031673a6886d0754416cf021814 100644
--- a/src/multicolvar/DihedralCorrelation.cpp
+++ b/src/multicolvar/DihedralCorrelation.cpp
@@ -84,7 +84,7 @@ class DihedralCorrelation : public MultiColvar {
 private:
 public:
   static void registerKeywords( Keywords& keys );
-  DihedralCorrelation(const ActionOptions&);
+  explicit DihedralCorrelation(const ActionOptions&);
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   bool isPeriodic(){ return false; }
 };
diff --git a/src/multicolvar/Distances.cpp b/src/multicolvar/Distances.cpp
index 9f5b256fe011fd9f7c91a1bdc94bd66252727fd0..2bf9839d9b2cfaedfba90139f13ea6c6b636859d 100644
--- a/src/multicolvar/Distances.cpp
+++ b/src/multicolvar/Distances.cpp
@@ -126,7 +126,7 @@ class Distances : public MultiColvar {
 private:
 public:
   static void registerKeywords( Keywords& keys );
-  Distances(const ActionOptions&);
+  explicit Distances(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
 /// Returns the number of coordinates of the field
diff --git a/src/multicolvar/DumpMultiColvar.cpp b/src/multicolvar/DumpMultiColvar.cpp
index 3d1b8bba530cbbd7e05e9e1f4065ef76a3a692f9..cbcfa0c4b7191d19dcfc952c3438e22e0fcc4972 100644
--- a/src/multicolvar/DumpMultiColvar.cpp
+++ b/src/multicolvar/DumpMultiColvar.cpp
@@ -71,7 +71,7 @@ class DumpMultiColvar:
   MultiColvarBase* mycolv; 
   std::string fmt_xyz;
 public:
-  DumpMultiColvar(const ActionOptions&);
+  explicit DumpMultiColvar(const ActionOptions&);
   ~DumpMultiColvar();
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/multicolvar/FilterBetween.cpp b/src/multicolvar/FilterBetween.cpp
index 97d071027c53246d18a4fcbe1c6b0a31107a8560..f68192022584c5dc78abf40e9a3a185e7d07c2cb 100644
--- a/src/multicolvar/FilterBetween.cpp
+++ b/src/multicolvar/FilterBetween.cpp
@@ -41,7 +41,7 @@ private:
   HistogramBead hb;
 public:
   static void registerKeywords( Keywords& keys );
-  FilterBetween(const ActionOptions& ao);
+  explicit FilterBetween(const ActionOptions& ao);
   double applyFilter( const double& val, double& df ) const ;
 }; 
 
diff --git a/src/multicolvar/FilterLessThan.cpp b/src/multicolvar/FilterLessThan.cpp
index 17acee9182a5435e064160d7296d93161f467539..1db871b805561487c6e96165d6ee6b3199c455f7 100644
--- a/src/multicolvar/FilterLessThan.cpp
+++ b/src/multicolvar/FilterLessThan.cpp
@@ -41,7 +41,7 @@ private:
   SwitchingFunction sf;
 public:
   static void registerKeywords( Keywords& keys );
-  FilterLess(const ActionOptions& ao);
+  explicit FilterLess(const ActionOptions& ao);
   double applyFilter( const double& val, double& df ) const ;
 }; 
 
diff --git a/src/multicolvar/FilterMoreThan.cpp b/src/multicolvar/FilterMoreThan.cpp
index d22fb6c968d58ab40a3953ee3b58b7d101af4ecc..e462bbf852aef13775e25f5dd412bfa083394941 100644
--- a/src/multicolvar/FilterMoreThan.cpp
+++ b/src/multicolvar/FilterMoreThan.cpp
@@ -41,7 +41,7 @@ private:
   SwitchingFunction sf;
 public:
   static void registerKeywords( Keywords& keys );
-  FilterMore(const ActionOptions& ao);
+  explicit FilterMore(const ActionOptions& ao);
   double applyFilter( const double& val, double& df ) const ;
 }; 
 
diff --git a/src/multicolvar/InPlaneDistances.cpp b/src/multicolvar/InPlaneDistances.cpp
index a925c6ee85b831badd09f15b5f0b4e11dbf01d80..7bbb9613f2d13c6169bdabdc147ca3d45760a9c5 100644
--- a/src/multicolvar/InPlaneDistances.cpp
+++ b/src/multicolvar/InPlaneDistances.cpp
@@ -46,7 +46,7 @@ Calculate distances in the plane perpendicular to an axis
 class InPlaneDistances : public MultiColvar {
 public:
   static void registerKeywords( Keywords& keys );
-  InPlaneDistances(const ActionOptions&);
+  explicit InPlaneDistances(const ActionOptions&);
 // active methods:
   virtual double compute(const unsigned& tindex, AtomValuePack& myatoms ) const ; 
   bool isPeriodic(){ return false; }
diff --git a/src/multicolvar/LocalAverage.cpp b/src/multicolvar/LocalAverage.cpp
index 9bd3765502a067559b70c3afe1051d110aefd031..de7076ce4b12bcb4768b32be83cbc451ca892585 100644
--- a/src/multicolvar/LocalAverage.cpp
+++ b/src/multicolvar/LocalAverage.cpp
@@ -88,7 +88,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  LocalAverage(const ActionOptions&);
+  explicit LocalAverage(const ActionOptions&);
 /// We have to overwrite this here
   unsigned getNumberOfQuantities();
 /// Actually do the calculation
diff --git a/src/multicolvar/MultiColvar.h b/src/multicolvar/MultiColvar.h
index fa7359f1d8050fd79e43ba4a75d3eb675aef6cc6..ed5edaf440f0928864efd30efb536ed72b661d57 100644
--- a/src/multicolvar/MultiColvar.h
+++ b/src/multicolvar/MultiColvar.h
@@ -58,7 +58,7 @@ protected:
 /// Add a collective variable
   void addColvar( const std::vector<unsigned>& newatoms );
 public:
-  MultiColvar(const ActionOptions&);
+  explicit MultiColvar(const ActionOptions&);
   ~MultiColvar(){}
   static void registerKeywords( Keywords& keys );
 /// Get the position of atom iatom
diff --git a/src/multicolvar/MultiColvarBase.h b/src/multicolvar/MultiColvarBase.h
index b532c4b145667a7c64520d0f92dfc4704fbfb5e9..02ecf222c9c5b4ab6c852e781059d514491c5c24 100644
--- a/src/multicolvar/MultiColvarBase.h
+++ b/src/multicolvar/MultiColvarBase.h
@@ -90,7 +90,7 @@ protected:
 /// Decode indices if there are 2 or 3 atoms involved
   void decodeIndexToAtoms( const unsigned& taskCode, std::vector<unsigned>& atoms ) const ;
 public:
-  MultiColvarBase(const ActionOptions&);
+  explicit MultiColvarBase(const ActionOptions&);
   ~MultiColvarBase(){}
   static void registerKeywords( Keywords& keys );
 /// Turn on the derivatives 
diff --git a/src/multicolvar/MultiColvarDensity.cpp b/src/multicolvar/MultiColvarDensity.cpp
index 8222be59fbdd4e000115a0dac49f0c61fecc405f..ac5cf65e74b7694241fde255a2b19957e979a581 100644
--- a/src/multicolvar/MultiColvarDensity.cpp
+++ b/src/multicolvar/MultiColvarDensity.cpp
@@ -70,7 +70,7 @@ class MultiColvarDensity :
   std::vector<double> bw;
   std::vector<unsigned> directions;
 public:
-  MultiColvarDensity(const ActionOptions&);
+  explicit MultiColvarDensity(const ActionOptions&);
   ~MultiColvarDensity();
   static void registerKeywords( Keywords& keys );
   void calculate(){}
diff --git a/src/multicolvar/MultiColvarFilter.h b/src/multicolvar/MultiColvarFilter.h
index 51a889d7f3a50b9511c676e2065017266a7a85ca..65004537b90ae850458209e6016b4c2064e8fde7 100644
--- a/src/multicolvar/MultiColvarFilter.h
+++ b/src/multicolvar/MultiColvarFilter.h
@@ -37,7 +37,7 @@ to see whether or not they are within a certain range
 class MultiColvarFilter : public BridgedMultiColvarFunction {
 public:
   static void registerKeywords( Keywords& keys );
-  MultiColvarFilter(const ActionOptions&);
+  explicit MultiColvarFilter(const ActionOptions&);
 /// Do everything required to setup the derivatives
   void doJobsRequiredBeforeTaskList();
 /// Get the number of quantities in the colvar
diff --git a/src/multicolvar/MultiColvarFunction.h b/src/multicolvar/MultiColvarFunction.h
index f660b518d5778c0cd8277376e5a7b100f2dbd0ad..2c377dc69cf6d99a281fd4c4e356d8e369b79b10 100644
--- a/src/multicolvar/MultiColvarFunction.h
+++ b/src/multicolvar/MultiColvarFunction.h
@@ -73,7 +73,7 @@ protected:
 /// Return the base multicolvar index that this colvar is a part of
   unsigned getBaseColvarNumber( const unsigned& iatom ) const ;
 public:
-  MultiColvarFunction(const ActionOptions&);
+  explicit MultiColvarFunction(const ActionOptions&);
   static void registerKeywords( Keywords& keys );
 /// Update the atoms that are active
   virtual void updateActiveAtoms( AtomValuePack& myatoms ) const ;
diff --git a/src/multicolvar/NumberOfLinks.cpp b/src/multicolvar/NumberOfLinks.cpp
index 373da6b369889454a46a7675e4a3d61f85ad88de..a810206ce72af816720cb98a7293f75ed6394951 100644
--- a/src/multicolvar/NumberOfLinks.cpp
+++ b/src/multicolvar/NumberOfLinks.cpp
@@ -73,7 +73,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  NumberOfLinks(const ActionOptions&);
+  explicit NumberOfLinks(const ActionOptions&);
 /// Do the stuff with the switching functions
   void calculateWeight( AtomValuePack& myatoms ) const ;
 /// Actually do the calculation
diff --git a/src/multicolvar/Sprint.cpp b/src/multicolvar/Sprint.cpp
index 70c2c163dd2abb0e94d5be6f756e4d86c71c3c23..f4ceaab182b2ba04669e72691818cda1461ef0fb 100644
--- a/src/multicolvar/Sprint.cpp
+++ b/src/multicolvar/Sprint.cpp
@@ -92,7 +92,7 @@ public:
 /// Create manual
   static void registerKeywords( Keywords& keys );
 /// Constructor
-  Sprint(const ActionOptions&);
+  explicit Sprint(const ActionOptions&);
 /// Do the matrix calculation
   void completeCalculation();
 /// Sprint needs its only apply routine as it creates values
diff --git a/src/multicolvar/Torsions.cpp b/src/multicolvar/Torsions.cpp
index 709e7991208fc6d85fb6bd1b90be88dd1e1ee83b..88840b5d184ba49c919c285b98d739f1db0295a4 100644
--- a/src/multicolvar/Torsions.cpp
+++ b/src/multicolvar/Torsions.cpp
@@ -74,7 +74,7 @@ Similarly \@psi-4 tells plumed that you want to calculate the \f$\psi\f$ angle o
 class Torsions : public MultiColvar {
 public:
   static void registerKeywords( Keywords& keys );
-  Torsions(const ActionOptions&);
+  explicit Torsions(const ActionOptions&);
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
   bool isPeriodic(){ return true; }
   void retrieveDomain( std::string& min, std::string& max ){ min="-pi"; max="pi"; }
diff --git a/src/multicolvar/VolumeAround.cpp b/src/multicolvar/VolumeAround.cpp
index 0883d9186b57aff87e672c839eefec81b335738d..6c21ca28d75239f1c8cc843bd00d53d8cbccd492 100644
--- a/src/multicolvar/VolumeAround.cpp
+++ b/src/multicolvar/VolumeAround.cpp
@@ -76,7 +76,7 @@ private:
   double zlow, zhigh;
 public:
   static void registerKeywords( Keywords& keys );
-  VolumeAround(const ActionOptions& ao);
+  explicit VolumeAround(const ActionOptions& ao);
   void setupRegions();
   double calculateNumberInside( const Vector& cpos, Vector& derivatives, Tensor& vir, std::vector<Vector>& refders ) const ;
 }; 
diff --git a/src/multicolvar/VolumeCavity.cpp b/src/multicolvar/VolumeCavity.cpp
index 00fa6d969ad2886ab197f5945e8acc4b25dc07ea..13e46700469e348b79ed2077ea17f51f0f8d7abd 100644
--- a/src/multicolvar/VolumeCavity.cpp
+++ b/src/multicolvar/VolumeCavity.cpp
@@ -118,7 +118,7 @@ private:
   std::vector<Tensor> dbi, dcross, dperp;
 public:
   static void registerKeywords( Keywords& keys );
-  VolumeCavity(const ActionOptions& ao);
+  explicit VolumeCavity(const ActionOptions& ao);
   ~VolumeCavity();
   void setupRegions();
   void update();
diff --git a/src/multicolvar/VolumeGradientBase.h b/src/multicolvar/VolumeGradientBase.h
index 3e773585444ef5f9b31e6f9c934b902d5f3bc4f1..926ade012ab3c99ae80d58f419dabb2f626b4a73 100644
--- a/src/multicolvar/VolumeGradientBase.h
+++ b/src/multicolvar/VolumeGradientBase.h
@@ -47,7 +47,7 @@ protected:
   void setNumberInVolume( const unsigned& , const unsigned& , const double& , const Vector& , const Tensor& , const std::vector<Vector>& , MultiValue& ) const ;
 public:
   static void registerKeywords( Keywords& keys );
-  VolumeGradientBase(const ActionOptions&);
+  explicit VolumeGradientBase(const ActionOptions&);
 /// Do jobs required before tasks are undertaken
   void doJobsRequiredBeforeTaskList();
 /// Actually do what we are asked
diff --git a/src/multicolvar/VolumeInCylinder.cpp b/src/multicolvar/VolumeInCylinder.cpp
index 6b94cd92a6ca40577ba36d4b81857457e33f882d..e7e1f02c9234b9e735635e807917dd9854993a04 100644
--- a/src/multicolvar/VolumeInCylinder.cpp
+++ b/src/multicolvar/VolumeInCylinder.cpp
@@ -69,7 +69,7 @@ private:
   SwitchingFunction switchingFunction;
 public:
   static void registerKeywords( Keywords& keys );
-  VolumeInCylinder (const ActionOptions& ao);
+  explicit VolumeInCylinder (const ActionOptions& ao);
   void setupRegions();
   double calculateNumberInside( const Vector& cpos, Vector& derivatives, Tensor& vir, std::vector<Vector>& refders ) const ;
 }; 
diff --git a/src/multicolvar/VolumeTetrapore.cpp b/src/multicolvar/VolumeTetrapore.cpp
index 857eea12d469247f3ee3003b3bad6290664b21f6..ec074975c52f274ce78ef6d1e3821938c867e7a4 100644
--- a/src/multicolvar/VolumeTetrapore.cpp
+++ b/src/multicolvar/VolumeTetrapore.cpp
@@ -47,7 +47,7 @@ private:
   std::vector<Tensor> dbi, dcross, dperp;
 public:
   static void registerKeywords( Keywords& keys );
-  VolumeTetrapore(const ActionOptions& ao);
+  explicit VolumeTetrapore(const ActionOptions& ao);
   ~VolumeTetrapore();
   void setupRegions();
   void update();
diff --git a/src/multicolvar/XDistances.cpp b/src/multicolvar/XDistances.cpp
index b9ddf6a4a9964a3b727746c8cd2a27a4d5f3057c..0333cf952a7b3694f29d3daec68ad7a7e4b06d1c 100644
--- a/src/multicolvar/XDistances.cpp
+++ b/src/multicolvar/XDistances.cpp
@@ -113,7 +113,7 @@ private:
   unsigned myc;
 public:
   static void registerKeywords( Keywords& keys );
-  XDistances(const ActionOptions&);
+  explicit XDistances(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
 /// Returns the number of coordinates of the field
diff --git a/src/multicolvar/XYDistances.cpp b/src/multicolvar/XYDistances.cpp
index bfccf6e4d6b616e8cc29ca6509d8018d02bdc89c..9836c0d105aeb9908fb66861f1383b7938ecd3d2 100644
--- a/src/multicolvar/XYDistances.cpp
+++ b/src/multicolvar/XYDistances.cpp
@@ -87,7 +87,7 @@ private:
   unsigned myc1, myc2;
 public:
   static void registerKeywords( Keywords& keys );
-  XYDistances(const ActionOptions&);
+  explicit XYDistances(const ActionOptions&);
 // active methods:
   virtual double compute( const unsigned& tindex, AtomValuePack& myatoms ) const ;
 /// Returns the number of coordinates of the field
diff --git a/src/reference/ArgumentOnlyDistance.h b/src/reference/ArgumentOnlyDistance.h
index 1ff130c8173c01b7abcdd6eb16dd32de8d54bd9c..2b045564af38a9c3683ce833c9443abd5b6f0c79 100644
--- a/src/reference/ArgumentOnlyDistance.h
+++ b/src/reference/ArgumentOnlyDistance.h
@@ -33,7 +33,7 @@ class Pbc;
 
 class ArgumentOnlyDistance : public ReferenceArguments {
 public:
-  ArgumentOnlyDistance( const ReferenceConfigurationOptions& ro );
+  explicit ArgumentOnlyDistance( const ReferenceConfigurationOptions& ro );
   void read( const PDB& pdb );
   double calc( const std::vector<Vector>& pos, const Pbc& pbc, const std::vector<Value*>& vals, const std::vector<double>& arg, ReferenceValuePack& myder, const bool& squared ) const ;
   double calculate( const std::vector<Value*>& vals, ReferenceValuePack& myder, const bool& squared ) const ;
diff --git a/src/reference/DRMSD.h b/src/reference/DRMSD.h
index 217d484819c8c4223250a90402e620b29528d450..c0278ae3c844e76967774b75a397e0a000857159 100644
--- a/src/reference/DRMSD.h
+++ b/src/reference/DRMSD.h
@@ -37,7 +37,7 @@ private:
   std::map< std::pair <unsigned,unsigned> , double> targets;
   void setup_targets();
 public:
-  DRMSD( const ReferenceConfigurationOptions& ro );
+  explicit DRMSD( const ReferenceConfigurationOptions& ro );
 /// This sets upper and lower bounds on distances to be used in DRMSD 
   void setBoundsOnDistances( bool dopbc, double lbound=0.0, double ubound=std::numeric_limits<double>::max( ) );
 /// Check that similar comparisons are being performed - perhaps this is needed ask Davide? GAT
diff --git a/src/reference/Direction.cpp b/src/reference/Direction.cpp
index 2ae232942968495b1f8250292d07daa78bea9d5c..9ec05b3819378f0fdeaf5f2101d23a1df0b0ff35 100644
--- a/src/reference/Direction.cpp
+++ b/src/reference/Direction.cpp
@@ -30,7 +30,7 @@ public ReferenceAtoms,
 public ReferenceArguments
 {
 public:
-  Direction( const ReferenceConfigurationOptions& ro );
+  explicit Direction( const ReferenceConfigurationOptions& ro );
   void read( const PDB& );
   double calc( const std::vector<Vector>& pos, const Pbc& pbc, const std::vector<Value*>& vals, const std::vector<double>& args, 
                ReferenceValuePack& myder, const bool& squared ) const ;
diff --git a/src/reference/DotProductDistance.cpp b/src/reference/DotProductDistance.cpp
index f70910716f1d664aa0ee102d505b608fc5f503f1..a613a8a1230658130c2c4dcfbd65c259d7d5d8aa 100644
--- a/src/reference/DotProductDistance.cpp
+++ b/src/reference/DotProductDistance.cpp
@@ -27,7 +27,7 @@ namespace PLMD {
 
 class DotProductDistance : public ArgumentOnlyDistance {
 public:
-  DotProductDistance( const ReferenceConfigurationOptions& ro );
+  explicit DotProductDistance( const ReferenceConfigurationOptions& ro );
   void read( const PDB& );
   double calc( const std::vector<Value*>& vals, const std::vector<double>& arg, const bool& squared );
 };
diff --git a/src/reference/EuclideanDistance.cpp b/src/reference/EuclideanDistance.cpp
index 6c327576026f8a2c79d0aef92440eb4ff81ccda0..ffa027c4dc0c55f8f0f5687aa6de1a90491f560a 100644
--- a/src/reference/EuclideanDistance.cpp
+++ b/src/reference/EuclideanDistance.cpp
@@ -26,7 +26,7 @@ namespace PLMD {
 
 class EuclideanDistance : public ArgumentOnlyDistance {
 public:
-  EuclideanDistance( const ReferenceConfigurationOptions& ro );
+  explicit EuclideanDistance( const ReferenceConfigurationOptions& ro );
   bool pcaIsEnabledForThisReference(){ return true; }
   void setupPCAStorage( ReferenceValuePack& mypack ){ mypack.switchOnPCAOption(); }
 };
diff --git a/src/reference/FakeFrame.h b/src/reference/FakeFrame.h
index 79e9e5354aa72176fc1c370ce2049b691ced95c3..9e90e1eb697bab1931349cd917ab5fec6b538a08 100644
--- a/src/reference/FakeFrame.h
+++ b/src/reference/FakeFrame.h
@@ -30,7 +30,7 @@ class FakeFrame :
 public PLMD::ReferenceConfiguration
 {
 public:
-  FakeFrame( const ReferenceConfigurationOptions& ro ) : ReferenceConfiguration(ro) {}
+  explicit FakeFrame( const ReferenceConfigurationOptions& ro ) : ReferenceConfiguration(ro) {}
   void read( const PDB& ){ plumed_merror("should not be called"); }
   double calc( const std::vector<Vector>& pos, const Pbc& pbc, const std::vector<Value*>& vals, const std::vector<double>& arg, ReferenceValuePack& myder, const bool& squared ) const { 
      plumed_merror("should not be called"); return 1.0; 
diff --git a/src/reference/MahalanobisDistance.cpp b/src/reference/MahalanobisDistance.cpp
index 2c6fd1f453711428b67c04963ce597261228c090..b10a6a818fb24bd4f1f53c323e9cc72967d343db 100644
--- a/src/reference/MahalanobisDistance.cpp
+++ b/src/reference/MahalanobisDistance.cpp
@@ -26,7 +26,7 @@ namespace PLMD {
 
 class MahalanobisDistance : public ArgumentOnlyDistance {
 public:
-  MahalanobisDistance( const ReferenceConfigurationOptions& ro );
+  explicit MahalanobisDistance( const ReferenceConfigurationOptions& ro );
 };
 
 PLUMED_REGISTER_METRIC(MahalanobisDistance,"MAHALANOBIS")
diff --git a/src/reference/MultiDomainRMSD.h b/src/reference/MultiDomainRMSD.h
index 9e26b7b66c4a7fa7b82915f2e24173f7000f69ff..7c60b77b21e46f9a92549187b7fbd33ed1a78802 100644
--- a/src/reference/MultiDomainRMSD.h
+++ b/src/reference/MultiDomainRMSD.h
@@ -39,7 +39,7 @@ private:
 /// Each of the domains we are calculating the distance from
   std::vector<SingleDomainRMSD*> domains;
 public:
-  MultiDomainRMSD( const ReferenceConfigurationOptions& ro );
+  explicit MultiDomainRMSD( const ReferenceConfigurationOptions& ro );
   ~MultiDomainRMSD();
 /// Read in the input from a pdb
   void read( const PDB& );
diff --git a/src/reference/NormalizedEuclideanDistance.cpp b/src/reference/NormalizedEuclideanDistance.cpp
index 51ee3be55fe3dea0191f5f6c0fc605c78dd42418..59f37b55228abfb8b3d0e5d03c787d90cf932bd7 100644
--- a/src/reference/NormalizedEuclideanDistance.cpp
+++ b/src/reference/NormalizedEuclideanDistance.cpp
@@ -26,7 +26,7 @@ namespace PLMD {
 
 class NormalizedEuclideanDistance : public ArgumentOnlyDistance {
 public:
-  NormalizedEuclideanDistance( const ReferenceConfigurationOptions& ro );
+  explicit NormalizedEuclideanDistance( const ReferenceConfigurationOptions& ro );
 };
 
 PLUMED_REGISTER_METRIC(NormalizedEuclideanDistance,"NORM-EUCLIDEAN")
diff --git a/src/reference/OptimalRMSD.cpp b/src/reference/OptimalRMSD.cpp
index c4f08c96277c8541c10c42a21ea819827d1d0bc1..7670d32800aae6627bde63e5d84b84df03827bf8 100644
--- a/src/reference/OptimalRMSD.cpp
+++ b/src/reference/OptimalRMSD.cpp
@@ -31,7 +31,7 @@ private:
   bool fast;
   RMSD myrmsd;
 public:
-  OptimalRMSD(const ReferenceConfigurationOptions& ro);
+  explicit OptimalRMSD(const ReferenceConfigurationOptions& ro);
   void read( const PDB& );
   double calc( const std::vector<Vector>& pos, ReferenceValuePack& myder, const bool& squared ) const ;
   bool pcaIsEnabledForThisReference(){ return true; }
diff --git a/src/reference/RMSDBase.h b/src/reference/RMSDBase.h
index af651bd4b52085e3f31ea6c1a60121f3b1a9b70d..67a5862efeb9c0168c255256ea62c2ff8cf96c3a 100644
--- a/src/reference/RMSDBase.h
+++ b/src/reference/RMSDBase.h
@@ -34,7 +34,7 @@ class RMSDBase : public SingleDomainRMSD {
 // this is to avoid warnings:
   using SingleDomainRMSD::calc;
 public:
-  RMSDBase( const ReferenceConfigurationOptions& ro );
+  explicit RMSDBase( const ReferenceConfigurationOptions& ro );
   double calc( const std::vector<Vector>& pos, const Pbc& pbc, ReferenceValuePack& myder, const bool& squared ) const;
   double calculate( const std::vector<Vector>& pos, ReferenceValuePack& myder, const bool& squared ) const ; 
   virtual double calc( const std::vector<Vector>& pos, ReferenceValuePack& myder, const bool& squared ) const=0;
diff --git a/src/reference/ReferenceArguments.h b/src/reference/ReferenceArguments.h
index 8e17ad41d29cbc54eb83c8291205e912c879b912..3ed35378f028d2ccf301934fa0a0d9b625beec4b 100644
--- a/src/reference/ReferenceArguments.h
+++ b/src/reference/ReferenceArguments.h
@@ -68,7 +68,7 @@ protected:
 /// configuration in CV space
   double calculateArgumentDistance( const std::vector<Value*> & vals, const std::vector<double>& arg, ReferenceValuePack& myder, const bool& squared ) const ;
 public:
-  ReferenceArguments( const ReferenceConfigurationOptions& ro );
+  explicit ReferenceArguments( const ReferenceConfigurationOptions& ro );
 /// Get the number of reference arguments
   unsigned getNumberOfReferenceArguments() const ;
 /// Get the arguments required 
diff --git a/src/reference/ReferenceAtoms.h b/src/reference/ReferenceAtoms.h
index b8ce2d36ad2b6a4ad8a74f3790005013958a4a3d..0acbed46d041a398dfb2f472717e5a032eb2d763 100644
--- a/src/reference/ReferenceAtoms.h
+++ b/src/reference/ReferenceAtoms.h
@@ -85,7 +85,7 @@ protected:
 /// This does the checks that are always required
   void singleDomainRequests( std::vector<AtomNumber>&, bool disable_checks );
 public:
-  ReferenceAtoms( const ReferenceConfigurationOptions& ro );
+  explicit ReferenceAtoms( const ReferenceConfigurationOptions& ro );
 /// This returns the number of reference atom positions
   unsigned getNumberOfReferencePositions() const ;
 /// This allows us to use a single pos array with RMSD objects using different atom indexes
diff --git a/src/reference/ReferenceConfiguration.h b/src/reference/ReferenceConfiguration.h
index a339936af42d1d6d6710504321f4a4203ea9fc64..66913bfb311d49b0e607119b6b209560a52da797 100644
--- a/src/reference/ReferenceConfiguration.h
+++ b/src/reference/ReferenceConfiguration.h
@@ -43,7 +43,7 @@ friend class ReferenceConfiguration;
 private:
   std::string tt;
 public:
-  ReferenceConfigurationOptions( const std::string& type );
+  explicit ReferenceConfigurationOptions( const std::string& type );
   bool usingFastOption() const ;
   std::string getMultiRMSDType() const ;
 };
@@ -90,7 +90,7 @@ protected:
 /// Clear the derivatives 
 //  void clearDerivatives();
 public:
-  ReferenceConfiguration( const ReferenceConfigurationOptions& ro );
+  explicit ReferenceConfiguration( const ReferenceConfigurationOptions& ro );
 /// Destructor
   virtual ~ReferenceConfiguration();
 /// Return the name of this metric
diff --git a/src/reference/SimpleRMSD.cpp b/src/reference/SimpleRMSD.cpp
index ad55f6cb048e61cc5e8f33a3e3da37bf1e7c8d71..c718ba980c77d807868d4cc4bc57502eb0543d2c 100644
--- a/src/reference/SimpleRMSD.cpp
+++ b/src/reference/SimpleRMSD.cpp
@@ -29,7 +29,7 @@ class SimpleRMSD : public RMSDBase {
 private:
   RMSD myrmsd;
 public:
-  SimpleRMSD( const ReferenceConfigurationOptions& ro );
+  explicit SimpleRMSD( const ReferenceConfigurationOptions& ro );
   void read( const PDB& );
   double calc( const std::vector<Vector>& pos, ReferenceValuePack& myder, const bool& squared ) const ;
   bool pcaIsEnabledForThisReference(){ return true; }
diff --git a/src/reference/SingleDomainRMSD.h b/src/reference/SingleDomainRMSD.h
index b6487b4da931d6d59575024d6d47716aeb91f062..a74b8d6999496622b8fbb463a6267a89235d7974 100644
--- a/src/reference/SingleDomainRMSD.h
+++ b/src/reference/SingleDomainRMSD.h
@@ -32,7 +32,7 @@ class SingleDomainRMSD : public ReferenceAtoms {
 protected:
   void readReference( const PDB& pdb );
 public:
-  SingleDomainRMSD( const ReferenceConfigurationOptions& ro );
+  explicit SingleDomainRMSD( const ReferenceConfigurationOptions& ro );
 /// Set the reference structure
   virtual void setReferenceAtoms( const std::vector<Vector>& conf, const std::vector<double>& align_in, const std::vector<double>& displace_in );
 /// Calculate
diff --git a/src/secondarystructure/AlphaRMSD.cpp b/src/secondarystructure/AlphaRMSD.cpp
index 029fe7f3b1bf18bce80001e6aafa05b6c6eaca7b..ee03e440e5ee297510572155f3016f4a507dbb41 100644
--- a/src/secondarystructure/AlphaRMSD.cpp
+++ b/src/secondarystructure/AlphaRMSD.cpp
@@ -80,7 +80,7 @@ ALPHARMSD RESIDUES=all TYPE=DRMSD LESS_THAN={RATIONAL R_0=0.08 NN=8 MM=12} LABEL
 class AlphaRMSD : public SecondaryStructureRMSD {
 public:
   static void registerKeywords( Keywords& keys );
-  AlphaRMSD(const ActionOptions&);
+  explicit AlphaRMSD(const ActionOptions&);
 }; 
 
 PLUMED_REGISTER_ACTION(AlphaRMSD,"ALPHARMSD")
diff --git a/src/secondarystructure/AntibetaRMSD.cpp b/src/secondarystructure/AntibetaRMSD.cpp
index 9cd13e0a967d991643224c4bacc57b185ef82249..18cb177966fa5396dd8f377727f5926af0baa13a 100644
--- a/src/secondarystructure/AntibetaRMSD.cpp
+++ b/src/secondarystructure/AntibetaRMSD.cpp
@@ -82,7 +82,7 @@ ANTIBETARMSD RESIDUES=all TYPE=DRMSD LESS_THAN={RATIONAL R_0=0.08 NN=8 MM=12} LA
 class AntibetaRMSD : public SecondaryStructureRMSD {
 public:
   static void registerKeywords( Keywords& keys );
-  AntibetaRMSD(const ActionOptions&);
+  explicit AntibetaRMSD(const ActionOptions&);
 }; 
 
 PLUMED_REGISTER_ACTION(AntibetaRMSD,"ANTIBETARMSD")
diff --git a/src/secondarystructure/ParabetaRMSD.cpp b/src/secondarystructure/ParabetaRMSD.cpp
index 235b00d2aad7a0bb3af97f7576b8cf639835914c..09c5e46a93dcceb9a94a8656542f5ad570d42c65 100644
--- a/src/secondarystructure/ParabetaRMSD.cpp
+++ b/src/secondarystructure/ParabetaRMSD.cpp
@@ -82,7 +82,7 @@ PARABETARMSD RESIDUES=all TYPE=DRMSD LESS_THAN={RATIONAL R_0=0.08 NN=8 MM=12} LA
 class ParabetaRMSD : public SecondaryStructureRMSD {
 public:
   static void registerKeywords( Keywords& keys );
-  ParabetaRMSD(const ActionOptions&);
+  explicit ParabetaRMSD(const ActionOptions&);
 }; 
 
 PLUMED_REGISTER_ACTION(ParabetaRMSD,"PARABETARMSD")
diff --git a/src/secondarystructure/SecondaryStructureRMSD.h b/src/secondarystructure/SecondaryStructureRMSD.h
index 1e0d00bd571d0a2766e47c994adec6363663e0c7..a7081e88222be147ec9b0c048af1c65fa8672c11 100644
--- a/src/secondarystructure/SecondaryStructureRMSD.h
+++ b/src/secondarystructure/SecondaryStructureRMSD.h
@@ -72,7 +72,7 @@ protected:
   void setAtomsFromStrands( const unsigned& atom1, const unsigned& atom2 );
 public:
   static void registerKeywords( Keywords& keys );
-  SecondaryStructureRMSD(const ActionOptions&);
+  explicit SecondaryStructureRMSD(const ActionOptions&);
   virtual ~SecondaryStructureRMSD();
   unsigned getNumberOfFunctionsInAction();
   unsigned getNumberOfDerivatives();
diff --git a/src/setup/Load.cpp b/src/setup/Load.cpp
index ba8dbbc64569a06b70d823cb567323feb679e476..fa844d9aa9fea63bbfe3c221d578901d50215430 100644
--- a/src/setup/Load.cpp
+++ b/src/setup/Load.cpp
@@ -51,7 +51,7 @@ class Load :
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Load(const ActionOptions&ao);
+  explicit Load(const ActionOptions&ao);
 };
 
 PLUMED_REGISTER_ACTION(Load,"LOAD")
diff --git a/src/setup/Restart.cpp b/src/setup/Restart.cpp
index a8efa8d1fe4f80b68bb0c72a833e06530f8f2665..a5e4f05f1b9ff8a14291bcbfda3c78a123dee30a 100644
--- a/src/setup/Restart.cpp
+++ b/src/setup/Restart.cpp
@@ -88,7 +88,7 @@ class Restart :
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Restart(const ActionOptions&ao);
+  explicit Restart(const ActionOptions&ao);
 };
 
 PLUMED_REGISTER_ACTION(Restart,"RESTART")
diff --git a/src/setup/Units.cpp b/src/setup/Units.cpp
index 47b63efac40049a1a93db7459490e8f8f70730e8..b80580ee77c588ab51763f8a1921682ea8196cef 100644
--- a/src/setup/Units.cpp
+++ b/src/setup/Units.cpp
@@ -63,7 +63,7 @@ class Units :
 {
 public:
   static void registerKeywords( Keywords& keys );
-  Units(const ActionOptions&ao);
+  explicit Units(const ActionOptions&ao);
 };
 
 PLUMED_REGISTER_ACTION(Units,"UNITS")
diff --git a/src/tools/AtomNumber.h b/src/tools/AtomNumber.h
index 2196c9d93be2456a647aeab3d6afd996fbf09d4b..360d4c1713b4a4a8e32e0bdb1e306df433191351 100644
--- a/src/tools/AtomNumber.h
+++ b/src/tools/AtomNumber.h
@@ -40,9 +40,11 @@ class AtomNumber{
   unsigned index_;
 /// Construct with a given index.
 /// This constructor is kept private to avoid implicit cast.
-  AtomNumber(unsigned);
+  explicit AtomNumber(unsigned);
 public:
 /// Initialize to index=0 (serial=1)
+// The following line triggers a warning in cppcheck,
+// cppcheck-suppress noExplicitConstructor
   AtomNumber();
 /// Returns the serial number
   unsigned serial()const;
diff --git a/src/tools/Communicator.h b/src/tools/Communicator.h
index dbf19c6bef294cd339fd795b3cba689fc964fc86..2309cc4eade2c7e3a5a95aa0987e4381f754d569 100644
--- a/src/tools/Communicator.h
+++ b/src/tools/Communicator.h
@@ -69,27 +69,27 @@ class Communicator{
 /// Init from pointer and size
     template <typename T> Data(T*p,int s): pointer(p), size(s), type(getMPIType<T>()) {}
 /// Init from reference
-    template <typename T> Data(T&p): pointer(&p), size(1), type(getMPIType<T>()) {}
+    template <typename T> explicit Data(T&p): pointer(&p), size(1), type(getMPIType<T>()) {}
 /// Init from pointer to VectorGeneric
-   template <unsigned n> Data(VectorGeneric<n> *p,int s): pointer(p), size(n*s), type(getMPIType<double>()) {}
+   template <unsigned n> explicit Data(VectorGeneric<n> *p,int s): pointer(p), size(n*s), type(getMPIType<double>()) {}
 /// Init from reference to VectorGeneric
-   template <unsigned n> Data(VectorGeneric<n> &p): pointer(&p), size(n), type(getMPIType<double>()) {}
+   template <unsigned n> explicit Data(VectorGeneric<n> &p): pointer(&p), size(n), type(getMPIType<double>()) {}
 /// Init from pointer to TensorGeneric
-   template <unsigned n,unsigned m> Data(TensorGeneric<n,m> *p,int s): pointer(p), size(n*m*s), type(getMPIType<double>()) {}
+   template <unsigned n,unsigned m> explicit Data(TensorGeneric<n,m> *p,int s): pointer(p), size(n*m*s), type(getMPIType<double>()) {}
 /// Init from reference to TensorGeneric
-   template <unsigned n,unsigned m> Data(TensorGeneric<n,m> &p): pointer(&p), size(n*m), type(getMPIType<double>()) {}
+   template <unsigned n,unsigned m> explicit Data(TensorGeneric<n,m> &p): pointer(&p), size(n*m), type(getMPIType<double>()) {}
 /// Init from reference to std::vector
-    template <typename T> Data(std::vector<T>&v){
+    template <typename T> explicit Data(std::vector<T>&v){
       if(v.size()>0){ Data d(&v[0],v.size()); pointer=d.pointer; size=d.size; type=d.type; }
       else { pointer=NULL; size=0; }
     }
 /// Init from reference to PLMD::Matrix
-    template <typename T> Data(Matrix<T>&m ){
+    template <typename T> explicit Data(Matrix<T>&m ){
       if(m.nrows()*m.ncols()>0){ Data d(&m(0,0),m.nrows()*m.ncols()); pointer=d.pointer; size=d.size; type=d.type; }
       else{ pointer=NULL; size=0; } 
     }
 /// Init from reference to std::string
-    Data(std::string&s){
+    explicit Data(std::string&s){
       if(s.size()>0){ Data d(&s[0],s.size()); pointer=d.pointer; size=d.size; type=d.type; }
       else { pointer=NULL; size=0; }
     }
@@ -100,21 +100,21 @@ class Communicator{
     const void*pointer;
     int size;
     MPI_Datatype type;
-    template <typename T> ConstData(const T*p,int s): pointer(p), size(s), type(getMPIType<T>()) {}
-    template <typename T> ConstData(const T&p): pointer(&p), size(1), type(getMPIType<T>()) {}
-    template <unsigned n> ConstData(const VectorGeneric<n> *p,int s): pointer(p), size(n*s), type(getMPIType<double>()) {}
-    template <unsigned n> ConstData(const VectorGeneric<n> &p): pointer(&p), size(n), type(getMPIType<double>()) {}
-    template <unsigned n,unsigned m> ConstData(const TensorGeneric<n,m> *p,int s): pointer(p), size(n*m*s), type(getMPIType<double>()) {}
-    template <unsigned n,unsigned m> ConstData(const TensorGeneric<n,m> &p): pointer(&p), size(n*m), type(getMPIType<double>()) {}
-    template <typename T> ConstData(const std::vector<T>&v){
+    template <typename T> explicit ConstData(const T*p,int s): pointer(p), size(s), type(getMPIType<T>()) {}
+    template <typename T> explicit ConstData(const T&p): pointer(&p), size(1), type(getMPIType<T>()) {}
+    template <unsigned n> explicit ConstData(const VectorGeneric<n> *p,int s): pointer(p), size(n*s), type(getMPIType<double>()) {}
+    template <unsigned n> explicit ConstData(const VectorGeneric<n> &p): pointer(&p), size(n), type(getMPIType<double>()) {}
+    template <unsigned n,unsigned m> explicit ConstData(const TensorGeneric<n,m> *p,int s): pointer(p), size(n*m*s), type(getMPIType<double>()) {}
+    template <unsigned n,unsigned m> explicit ConstData(const TensorGeneric<n,m> &p): pointer(&p), size(n*m), type(getMPIType<double>()) {}
+    template <typename T> explicit ConstData(const std::vector<T>&v){
       if(v.size()>0){ ConstData d(&v[0],v.size()); pointer=d.pointer; size=d.size; type=d.type; }
       else { pointer=NULL; size=0; }
     }
-    template <typename T> ConstData(const Matrix<T>&m ){
+    template <typename T> explicit ConstData(const Matrix<T>&m ){
       if(m.nrows()*m.ncols()>0){ ConstData d(&m(0,0),m.nrows()*m.ncols()); pointer=d.pointer; size=d.size; type=d.type; }
       else{ pointer=NULL; size=0; }
     }
-    ConstData(const std::string&s){
+    explicit ConstData(const std::string&s){
       if(s.size()>0){ ConstData d(&s[0],s.size()); pointer=d.pointer; size=d.size; type=d.type; }
       else { pointer=NULL; size=0; }
     }
diff --git a/src/tools/Exception.h b/src/tools/Exception.h
index aabb5b31e4f4492690f5b574b2fdb78972bcb748..02c904c34778c6fd422a3488bad26f1473256c34 100644
--- a/src/tools/Exception.h
+++ b/src/tools/Exception.h
@@ -104,7 +104,7 @@ public:
 /// Without message
   Exception();
 /// With message
-  Exception(const std::string&);
+  explicit Exception(const std::string&);
 /// With message plus file, line and function (meant to be used through a preprocessor macro)
   Exception(const std::string&,const std::string&,unsigned,const std::string&);
 /// Returns the error message
diff --git a/src/tools/FileBase.h b/src/tools/FileBase.h
index 948b746d83f31a1ce94d2879bbd8b408096562e6..6890ef191df2ab1454a366c09c2f147153e50f6d 100644
--- a/src/tools/FileBase.h
+++ b/src/tools/FileBase.h
@@ -38,7 +38,7 @@ This class just provides things which are common among OFile and IFile
 
 class FileBase{
 /// Copy constructor is disabled (private and unimplemented)
-  FileBase(const FileBase&);
+  explicit FileBase(const FileBase&);
 /// Assignment operator is disabled (private and unimplemented)
   FileBase& operator=(const FileBase&);
 protected:
diff --git a/src/tools/Grid.h b/src/tools/Grid.h
index 9af3c1703213dfcb2c1b55b09c362e720fa0f766..2897d6215d0f80a8ccaba8d98eb0bff6b742575d 100644
--- a/src/tools/Grid.h
+++ b/src/tools/Grid.h
@@ -42,7 +42,7 @@ class WeightBase{
 class BiasWeight:public WeightBase{
     public:
       double beta,invbeta;
-      BiasWeight(double v){beta=v;invbeta=1./beta;}
+      explicit BiasWeight(double v){beta=v;invbeta=1./beta;}
       double projectInnerLoop(double &input, double &v){return  input+exp(beta*v);}
       double projectOuterLoop(double &v){return -invbeta*std::log(v);}
 };
@@ -50,7 +50,7 @@ class BiasWeight:public WeightBase{
 class ProbWeight:public WeightBase{
     public:
       double beta,invbeta;
-      ProbWeight(double v){beta=v;invbeta=1./beta;}
+      explicit ProbWeight(double v){beta=v;invbeta=1./beta;}
       double projectInnerLoop(double &input, double &v){return  input+v;}
       double projectOuterLoop(double &v){return -invbeta*std::log(v);}
 };
diff --git a/src/tools/Keywords.h b/src/tools/Keywords.h
index 10900540619265378052071b3ca4697e33013a9b..cfd99fe2f7662c0e715a05725a3c277544a1e739 100644
--- a/src/tools/Keywords.h
+++ b/src/tools/Keywords.h
@@ -38,7 +38,7 @@ class Keywords{
   class KeyType{
   public:
     enum {hidden,compulsory,flag,optional,atoms} style;
-    KeyType( const std::string& type );
+    explicit KeyType( const std::string& type );
     void setStyle( const std::string& type );
     bool isCompulsory() const { return (style==compulsory); }
     bool isFlag() const { return (style==flag); }
diff --git a/src/tools/LinkCells.h b/src/tools/LinkCells.h
index 91563482c3bb521621f89b4c516811ed47ac4caf..9dc62cdb75c0859c6f09b92e8ca3d297942d1f5d 100644
--- a/src/tools/LinkCells.h
+++ b/src/tools/LinkCells.h
@@ -60,7 +60,7 @@ private:
   unsigned findCell( const Vector& pos ) const ;
 public:
 ///
-  LinkCells( Communicator& comm );
+  explicit LinkCells( Communicator& comm );
 /// Have the link cells been enabled
   bool enabled() const ;
 /// Set the value of the cutoff
diff --git a/src/tools/Random.h b/src/tools/Random.h
index ce5dfa51e49499ef956cc556e8c42459da64c38c..63f02acb5d5b939a7b1e40b9c22ff7fb47284a2f 100644
--- a/src/tools/Random.h
+++ b/src/tools/Random.h
@@ -44,7 +44,7 @@ class Random{
 	int idum;
 	std::string name;
 public:
-	Random(const std::string & name=noname);
+	explicit Random(const std::string & name=noname);
 	void setSeed(int idum);
 	double RandU01();
 	double U01();
diff --git a/src/vatom/COM.cpp b/src/vatom/COM.cpp
index 29b00201f53ff0c97a8819815e461d47cde3d995..30795d9712154472b4e72eca7c4a9a8ed3167f1a 100644
--- a/src/vatom/COM.cpp
+++ b/src/vatom/COM.cpp
@@ -71,7 +71,7 @@ class COM:
 {
   bool nopbc;
 public:
-  COM(const ActionOptions&ao);
+  explicit COM(const ActionOptions&ao);
   void calculate();
   static void registerKeywords( Keywords& keys );
 };
diff --git a/src/vatom/Center.cpp b/src/vatom/Center.cpp
index 7660fef6a00a70b41541af21335e86e1a095eeab..326bd3c3168fd31546aa31f01c4657da87347a82 100644
--- a/src/vatom/Center.cpp
+++ b/src/vatom/Center.cpp
@@ -81,7 +81,7 @@ class Center:
   bool weight_mass;
   bool nopbc;
 public:
-  Center(const ActionOptions&ao);
+  explicit Center(const ActionOptions&ao);
   void calculate();
   static void registerKeywords( Keywords& keys );
 };
diff --git a/src/vatom/Ghost.cpp b/src/vatom/Ghost.cpp
index 9efd2209e9662883842161a8ae87bc4f423c0e9e..b8873b75c33bc6ad90c090e189a6b5e04422c53e 100644
--- a/src/vatom/Ghost.cpp
+++ b/src/vatom/Ghost.cpp
@@ -56,7 +56,7 @@ class Ghost:
 {
   vector<double> coord;
 public:
-  Ghost(const ActionOptions&ao);
+  explicit Ghost(const ActionOptions&ao);
   void calculate();
   static void registerKeywords( Keywords& keys );
 };
diff --git a/src/vesselbase/ActionWithInputVessel.h b/src/vesselbase/ActionWithInputVessel.h
index 2313b639382c9816d79d6ca70eb9d93b81742da1..0b94300ee5f044b5024a7337fa0303b5c398d694 100644
--- a/src/vesselbase/ActionWithInputVessel.h
+++ b/src/vesselbase/ActionWithInputVessel.h
@@ -47,7 +47,7 @@ protected:
 public:
 /// Registers the list of keywords
   static void registerKeywords( Keywords& keys );
-  ActionWithInputVessel(const ActionOptions&);
+  explicit ActionWithInputVessel(const ActionOptions&);
   virtual ~ActionWithInputVessel(){}
 /// Calculate the numerical derivatives
 /// N.B. only pass an ActionWithValue to this routine if you know exactly what you 
diff --git a/src/vesselbase/ActionWithVessel.h b/src/vesselbase/ActionWithVessel.h
index 56d4e38a246536a7f0019bfb1f01fb8031a9ef05..a23638b6280cd32339b9ddcd3f9d1397793a143b 100644
--- a/src/vesselbase/ActionWithVessel.h
+++ b/src/vesselbase/ActionWithVessel.h
@@ -144,7 +144,7 @@ protected:
   void addTaskToList( const unsigned& taskCode );
 public:
   static void registerKeywords(Keywords& keys);
-  ActionWithVessel(const ActionOptions&ao);
+  explicit ActionWithVessel(const ActionOptions&ao);
   ~ActionWithVessel();
   void unlockContributors();
   void lockContributors();
diff --git a/src/vesselbase/AltMin.cpp b/src/vesselbase/AltMin.cpp
index b2c423b03294923b6082c443ca87c66412d1e1e2..4dc0418d3aca6a998dc6a352e4cdbe037a89af45 100644
--- a/src/vesselbase/AltMin.cpp
+++ b/src/vesselbase/AltMin.cpp
@@ -31,7 +31,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  AltMin( const vesselbase::VesselOptions& da );
+  explicit AltMin( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double finalTransform( const double& val, double& dv );
diff --git a/src/vesselbase/Between.h b/src/vesselbase/Between.h
index ed665c257c803513ce78ec7dc733433abee117f8..a5388b188d93103cddf103ea33231b7cdfdad79b 100644
--- a/src/vesselbase/Between.h
+++ b/src/vesselbase/Between.h
@@ -34,7 +34,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Between( const VesselOptions& da );
+  explicit Between( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double getCutoff();
diff --git a/src/vesselbase/BridgeVessel.h b/src/vesselbase/BridgeVessel.h
index 34880bcf3a8c232fe3a6e1df4a4681a576a777da..8a9ad99b16df3f4cd283492aaed3fe3c0373a675 100644
--- a/src/vesselbase/BridgeVessel.h
+++ b/src/vesselbase/BridgeVessel.h
@@ -45,7 +45,7 @@ private:
   ActionWithVessel* myOutputAction;
   ActionWithValue* myOutputValues;
 public:
-  BridgeVessel( const VesselOptions& );
+  explicit BridgeVessel( const VesselOptions& );
 /// Does this have derivatives
   bool hasDerivatives();
 /// Resize the quantities in the vessel
diff --git a/src/vesselbase/FunctionVessel.h b/src/vesselbase/FunctionVessel.h
index aafa5836f16e90a46fa60274991f049686104f8a..cc7cb816a38c12a56bb5a7342f7d023f948ec408 100644
--- a/src/vesselbase/FunctionVessel.h
+++ b/src/vesselbase/FunctionVessel.h
@@ -48,7 +48,7 @@ protected:
   bool usetol;
 public:
   static void registerKeywords( Keywords& keys );
-  FunctionVessel( const VesselOptions& );
+  explicit FunctionVessel( const VesselOptions& );
 /// This does the resizing of the buffer
   virtual void resize();
 /// Do the calcualtion
diff --git a/src/vesselbase/Highest.cpp b/src/vesselbase/Highest.cpp
index ef9358f48f9035d33ac68e15b68d2426c2cc7d41..97fdb7e090cff8bdd003a5765b1d516042d6006a 100644
--- a/src/vesselbase/Highest.cpp
+++ b/src/vesselbase/Highest.cpp
@@ -29,7 +29,7 @@ class Highest : public OrderingVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Highest( const VesselOptions& da );
+  explicit Highest( const VesselOptions& da );
   std::string value_descriptor();
   bool compare( const double& , const double& );
 };
diff --git a/src/vesselbase/Histogram.cpp b/src/vesselbase/Histogram.cpp
index 106618adf30989c8d035240d7afb9df84c154a89..0a06789eb1523c3f79692bdf563b1b8019a2fcd5 100644
--- a/src/vesselbase/Histogram.cpp
+++ b/src/vesselbase/Histogram.cpp
@@ -30,7 +30,7 @@ class Histogram : public ShortcutVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Histogram( const VesselOptions& da );
+  explicit Histogram( const VesselOptions& da );
 };
 
 PLUMED_REGISTER_VESSEL(Histogram,"HISTOGRAM")
diff --git a/src/vesselbase/LessThan.h b/src/vesselbase/LessThan.h
index 97fbecb534a79dee2d1a8e20642381f9be9b76a5..eade2002a64f4f796ff93332773dc2c60d80dca8 100644
--- a/src/vesselbase/LessThan.h
+++ b/src/vesselbase/LessThan.h
@@ -35,7 +35,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys ); 
-  LessThan( const VesselOptions& da );
+  explicit LessThan( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double getCutoff();
diff --git a/src/vesselbase/Lowest.cpp b/src/vesselbase/Lowest.cpp
index 769564dcb16a21d4c21f385d8a059c9aaad20cc4..7564cc651a2702aacd3283ad8b964a1aac00e2dd 100644
--- a/src/vesselbase/Lowest.cpp
+++ b/src/vesselbase/Lowest.cpp
@@ -29,7 +29,7 @@ class Lowest : public OrderingVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Lowest( const VesselOptions& da );
+  explicit Lowest( const VesselOptions& da );
   std::string value_descriptor();
   bool compare( const double& , const double& );
 };
diff --git a/src/vesselbase/Max.cpp b/src/vesselbase/Max.cpp
index 72e31be6aa7562698a2c53afb5e3d32535c9f63f..cea5ba246b202f2ccea5f7b924fbfc1097ec80c9 100644
--- a/src/vesselbase/Max.cpp
+++ b/src/vesselbase/Max.cpp
@@ -32,7 +32,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Max( const VesselOptions& da );
+  explicit Max( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double finalTransform( const double& val, double& dv );
diff --git a/src/vesselbase/Mean.cpp b/src/vesselbase/Mean.cpp
index ccf9ef38e4aa1370a8b1431885539df53c7798ac..b0575321e16eb4fab40aeba2d1cee1e3bbd64940 100644
--- a/src/vesselbase/Mean.cpp
+++ b/src/vesselbase/Mean.cpp
@@ -30,7 +30,7 @@ class Mean : public FunctionVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Mean( const vesselbase::VesselOptions& da );
+  explicit Mean( const vesselbase::VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
 };
diff --git a/src/vesselbase/Min.cpp b/src/vesselbase/Min.cpp
index 65c4bf9b9222999f2eeca463707a3536eb2dedbe..c1a163d178790ba86af4ff86a0b0e731eb333589 100644
--- a/src/vesselbase/Min.cpp
+++ b/src/vesselbase/Min.cpp
@@ -32,7 +32,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Min( const VesselOptions& da );
+  explicit Min( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
   double finalTransform( const double& val, double& dv );
diff --git a/src/vesselbase/Moments.cpp b/src/vesselbase/Moments.cpp
index 89264c0bcb631efdbceb8ad0a16cd634c1d319e4..8b1cffd30ca32d4c50353f5bb7f92ff7fb428b27 100644
--- a/src/vesselbase/Moments.cpp
+++ b/src/vesselbase/Moments.cpp
@@ -37,7 +37,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Moments( const vesselbase::VesselOptions& da );
+  explicit Moments( const vesselbase::VesselOptions& da );
   std::string description();
   void resize();
   void finish( const std::vector<double>& buffer );
diff --git a/src/vesselbase/MoreThan.cpp b/src/vesselbase/MoreThan.cpp
index 1372d2fea5e8c0e968198c3d4b178e5c1195828a..5ee472c6f57ce5cc205aba4c07ac690d450cf80b 100644
--- a/src/vesselbase/MoreThan.cpp
+++ b/src/vesselbase/MoreThan.cpp
@@ -34,7 +34,7 @@ private:
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  MoreThan( const VesselOptions& da );
+  explicit MoreThan( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
 };
diff --git a/src/vesselbase/OrderingVessel.h b/src/vesselbase/OrderingVessel.h
index 228b9f92607104c53c748547de64640028d5ca61..c4fa9aecc639428c8058cbdbfa03269366d17648 100644
--- a/src/vesselbase/OrderingVessel.h
+++ b/src/vesselbase/OrderingVessel.h
@@ -37,7 +37,7 @@ private:
   StoreDataVessel* mydata;
 public:
   static void registerKeywords( Keywords& keys );
-  OrderingVessel( const VesselOptions& da );
+  explicit OrderingVessel( const VesselOptions& da );
   void resize();
   bool calculate( const unsigned& current, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_list ) const { return true; }
   void finish( const std::vector<double>& buffer );
diff --git a/src/vesselbase/ShortcutVessel.h b/src/vesselbase/ShortcutVessel.h
index 0e58d50c5546457b1b1450d86800811b78c1a83f..9eeb5ce97fe416bb06c93e5bbdcbd0b943387a38 100644
--- a/src/vesselbase/ShortcutVessel.h
+++ b/src/vesselbase/ShortcutVessel.h
@@ -36,7 +36,7 @@ protected:
   void addVessel( const std::string& name, const std::string& intput );  
 public:
   static void registerKeywords( Keywords& keys );
-  ShortcutVessel( const VesselOptions& );
+  explicit ShortcutVessel( const VesselOptions& );
   std::string description(){ return ""; }
   void resize(){ plumed_error(); }
   bool calculate( const unsigned& taskCode, MultiValue& myvals, std::vector<double>& buffer, std::vector<unsigned>& der_index ) const { plumed_error(); }
diff --git a/src/vesselbase/StoreDataVessel.h b/src/vesselbase/StoreDataVessel.h
index 759120c39190a7480e8099d0097ddd0b6ef97bfb..f0d36760666f3f2d446f31e3e39f7e3743360b77 100644
--- a/src/vesselbase/StoreDataVessel.h
+++ b/src/vesselbase/StoreDataVessel.h
@@ -80,7 +80,7 @@ protected:
   void setLocalDerivative( const unsigned& ibuf, const double& val );
 public:
   static void registerKeywords( Keywords& keys );
-  StoreDataVessel( const VesselOptions& );
+  explicit StoreDataVessel( const VesselOptions& );
 /// Get the number of values that have been stored
   unsigned getNumberOfStoredValues() const ;
 /// Set a hard cutoff on the weight of an element
diff --git a/src/vesselbase/Sum.cpp b/src/vesselbase/Sum.cpp
index 97861c5480d9018f68634fd2da6e89935e358feb..068b8bf3bc165da5e0fa30b1ea652ed8a950d37a 100644
--- a/src/vesselbase/Sum.cpp
+++ b/src/vesselbase/Sum.cpp
@@ -29,7 +29,7 @@ class Sum : public FunctionVessel {
 public:
   static void registerKeywords( Keywords& keys );
   static void reserveKeyword( Keywords& keys );
-  Sum( const VesselOptions& da );
+  explicit Sum( const VesselOptions& da );
   std::string value_descriptor();
   double calcTransform( const double& val, double& dv ) const ;
 };
diff --git a/src/vesselbase/ValueVessel.h b/src/vesselbase/ValueVessel.h
index 851767456728c2c5de696fd95ca35c0171d45c9f..9e8b26ed782aebe6eb69ca71a5418d68e8c92bf9 100644
--- a/src/vesselbase/ValueVessel.h
+++ b/src/vesselbase/ValueVessel.h
@@ -41,7 +41,7 @@ protected:
   void setOutputValue( const double& val );
 public:
   static void registerKeywords( Keywords& keys );
-  ValueVessel( const VesselOptions& da );
+  explicit ValueVessel( const VesselOptions& da );
   std::string description();
   virtual std::string value_descriptor()=0;
   bool applyForce( std::vector<double>& forces );
diff --git a/src/vesselbase/Vessel.h b/src/vesselbase/Vessel.h
index 304669dc9e3b0b11f7ecd175282226ee173d4cf4..6ca8ca297c31eedc485ad2e020114aa9df4a4543 100644
--- a/src/vesselbase/Vessel.h
+++ b/src/vesselbase/Vessel.h
@@ -128,7 +128,7 @@ public:
 /// Convert the name to the label of the component
   static std::string transformName( const std::string& name );
 /// The constructor
-  Vessel( const VesselOptions& da );
+  explicit Vessel( const VesselOptions& da );
 /// Virtual destructor needed for proper inheritance
   virtual ~Vessel(){}
 /// Return the name
diff --git a/src/wrapper/Plumed.h b/src/wrapper/Plumed.h
index fb6b2ef676fc0c6197b1093935cdbd3fb564c7d3..eab4d8d166e99f4754a17074cefb7cce26f4d589 100644
--- a/src/wrapper/Plumed.h
+++ b/src/wrapper/Plumed.h
@@ -365,6 +365,9 @@ public:
             will not finalize the corresponding plumed structure.
             It is expected that the FORTRAN code calls plumed_c_finalize for it
 */
+// to have maximum portability of this file I do not use the explicit keyword here
+// I thus add a suppress command for cppcheck
+// cppcheck-suppress noExplicitConstructor
   Plumed(const char*c);
 /**
    Clone a Plumed object from a C plumed structure
@@ -373,7 +376,10 @@ public:
  \attention The Plumed object created in this manner
             will not finalize the corresponding plumed structure.
             It is expected that the C code calls plumed_finalize for it
-*/
+*/ 
+// to have maximum portability of this file I do not use the explicit keyword here
+// I thus add a suppress command for cppcheck
+// cppcheck-suppress noExplicitConstructor
   Plumed(plumed p);
 private:
 /** Copy constructor is disabled (private and unimplemented)