diff --git a/src/core/ActionWithValue.h b/src/core/ActionWithValue.h
index 2bb744a9a81557e4ede0a1677a6a53f71954c2e9..15c03f59e888cfd404fc41f595263aae06a59b56 100644
--- a/src/core/ActionWithValue.h
+++ b/src/core/ActionWithValue.h
@@ -65,8 +65,6 @@ PLMD::Action you should use <b> the routines with the word component in the name
 class ActionWithValue : 
   public virtual Action
 {
-friend class VesselAccumulator;
-friend class VesselMoment;
 private:
 /// An array containing the values for this action
   std::vector<Value*> values;
@@ -93,6 +91,7 @@ protected:
 
 // -------- The action has multiple components ---------- //
 
+public:
 /// Add a value with a name like label.name
   void addComponent( const std::string& name );
 /// Add a value with a name like label.name that has derivatives
@@ -101,6 +100,7 @@ protected:
   void componentIsNotPeriodic( const std::string& name );
 /// Set the value to be periodic with a particular domain
   void componentIsPeriodic( const std::string& name, const std::string& min, const std::string& max );
+protected:
 /// Return a pointer to the component by index
   Value* getPntrToComponent(int i);
 /// Return a pointer to the value by name
diff --git a/src/multicolvar/MultiColvar.cpp b/src/multicolvar/MultiColvar.cpp
index a8d11d5d2021ba7d6bac1fd7a0ee918e4b60e354..9b83aa7fb17cc39c84532aaa7884397d50345bd5 100644
--- a/src/multicolvar/MultiColvar.cpp
+++ b/src/multicolvar/MultiColvar.cpp
@@ -377,7 +377,7 @@ void MultiColvar::retrieveColvarWeight( const unsigned& j, Value& ww ){
   ww.clearDerivatives(); ww.set(1.0);
 }
 
-void MultiColvar::mergeDerivatives( const unsigned jcv, const Value& value_in, const double& df, const unsigned& vstart, Vessel* valout ){    
+void MultiColvar::mergeDerivatives( const unsigned jcv, const Value& value_in, const double& df, const unsigned& vstart, vesselbase::Vessel* valout ){    
   plumed_assert( value_in.getNumberOfDerivatives()==3*colvar_atoms[jcv].getNumberActive()+9);
 
   int thisatom, thispos, in=0; unsigned innat=colvar_atoms[jcv].getNumberActive();
diff --git a/src/multicolvar/MultiColvar.h b/src/multicolvar/MultiColvar.h
index eb9db602fdff1e84f3863426b7c67f2c6a472e98..38e90252b6ba15ec6c85b7c0b0d195cb430eba66 100644
--- a/src/multicolvar/MultiColvar.h
+++ b/src/multicolvar/MultiColvar.h
@@ -43,7 +43,7 @@ thereof, whtin it there is \ref AddingAMultiColvar "information" as to how to go
 class MultiColvar :
   public ActionAtomistic,
   public ActionWithValue,
-  public ActionWithVessel
+  public vesselbase::ActionWithVessel
   {
 private:
   bool usepbc;
@@ -113,7 +113,7 @@ public:
 /// Get the weight of the colvar
   virtual void retrieveColvarWeight( const unsigned& i, Value& ww );
 /// Merge the derivatives 
-  void mergeDerivatives( const unsigned j, const Value& value_in, const double& df, const unsigned& vstart, Vessel* valout );
+  void mergeDerivatives( const unsigned j, const Value& value_in, const double& df, const unsigned& vstart, vesselbase::Vessel* valout );
   void mergeDerivatives( const unsigned j, const Value& value_in, const double& df, Value* valout );
 /// Turn of atom requests when this colvar is deactivated cos its small
   void deactivateValue( const unsigned j );
diff --git a/src/multicolvar/VesselCVdens.cpp b/src/multicolvar/VesselCVdens.cpp
index d88d80a168ef65be44473873c1ad98a5d16c81bf..e9a5ecd91e9771bc66a2a54e32f6d49605e8b224 100644
--- a/src/multicolvar/VesselCVdens.cpp
+++ b/src/multicolvar/VesselCVdens.cpp
@@ -88,7 +88,7 @@ DENSITY SPECIES=20-500 REGION={SIGMA=0.1 VOLUME=r2}
 //+ENDPLUMEDOC
 
 
-class VesselCVDens : public NormedSumVessel {
+class VesselCVDens : public vesselbase::NormedSumVessel {
 private:
   bool isDensity;
   Value tmpval, tmpweight;
@@ -99,7 +99,7 @@ private:
   HistogramBead bead;
 public:
   static void reserveKeyword( Keywords& keys );
-  VesselCVDens( const VesselOptions& da );
+  VesselCVDens( const vesselbase::VesselOptions& da );
   void getWeight( const unsigned& i, Value& weight );
   void compute( const unsigned& i, const unsigned& j, Value& theval );
 };
@@ -111,7 +111,7 @@ void VesselCVDens::reserveKeyword( Keywords& keys ){
                                     "For more details on how this quantity is calculated see \\ref region.");
 }
 
-VesselCVDens::VesselCVDens( const VesselOptions& da ) :
+VesselCVDens::VesselCVDens( const vesselbase::VesselOptions& da ) :
 NormedSumVessel(da),
 catom_pos(3),
 not_in(false)
diff --git a/src/multicolvar/VesselMean.cpp b/src/multicolvar/VesselMean.cpp
index de6088d619d094483cbbb8e3bd6589aa1ffc799e..06be7c78da97217bda5012952ff69f0cc12cfeaf 100644
--- a/src/multicolvar/VesselMean.cpp
+++ b/src/multicolvar/VesselMean.cpp
@@ -26,12 +26,12 @@
 namespace PLMD {
 namespace multicolvar {
 
-class VesselMean : public NormedSumVessel {
+class VesselMean : public vesselbase::NormedSumVessel {
 private:
   MultiColvar* mycolv;
 public:
   static void reserveKeyword( Keywords& keys );
-  VesselMean( const VesselOptions& da );
+  VesselMean( const vesselbase::VesselOptions& da );
   void getWeight( const unsigned& i, Value& weight );
   void compute( const unsigned& i, const unsigned& j, Value& theval );
 };
@@ -42,7 +42,7 @@ void VesselMean::reserveKeyword( Keywords& keys ){
   keys.reserveFlag("AVERAGE",false,"take the average value of these variables and store it in value called average.");
 }
 
-VesselMean::VesselMean( const VesselOptions& da ) :
+VesselMean::VesselMean( const vesselbase::VesselOptions& da ) :
 NormedSumVessel(da)
 {
   if( getAction()->isPeriodic() ) error("MEAN cannot be used with periodic variables");
diff --git a/src/multicolvar/VesselWithin.cpp b/src/multicolvar/VesselWithin.cpp
index 5558951c597f9aa29fca59285a109a146074b1c8..e864c7d2e6754902761b9d6424249a1a3391868c 100644
--- a/src/multicolvar/VesselWithin.cpp
+++ b/src/multicolvar/VesselWithin.cpp
@@ -28,13 +28,13 @@
 namespace PLMD {
 namespace multicolvar {
 
-class VesselWithin : public NormedSumVessel {
+class VesselWithin : public vesselbase::NormedSumVessel {
 private:
   MultiColvar* mycolv;
   std::vector<HistogramBead> hist;
 public:
   static void reserveKeyword( Keywords& keys );
-  VesselWithin( const VesselOptions& da );
+  VesselWithin( const vesselbase::VesselOptions& da );
   void getWeight( const unsigned& i, Value& weight );
   void compute( const unsigned& i, const unsigned& j, Value& theval );
   void printKeywords();
@@ -49,7 +49,7 @@ void VesselWithin::reserveKeyword( Keywords& keys ){
                                     "\\ref histogrambead. The final values can be referenced using \\e label.between\\f$a\\f$&\\f$b\\f$."); 
 }
 
-VesselWithin::VesselWithin( const VesselOptions& da ) :
+VesselWithin::VesselWithin( const vesselbase::VesselOptions& da ) :
 NormedSumVessel(da)
 { 
 
diff --git a/src/vessel-base/ActionWithVessel.cpp b/src/vessel-base/ActionWithVessel.cpp
index 39636948ae469698a9b05a47238d0eff916f7473..48a3902d2137e295d13301262b167d2cd1b6ef95 100644
--- a/src/vessel-base/ActionWithVessel.cpp
+++ b/src/vessel-base/ActionWithVessel.cpp
@@ -24,7 +24,8 @@
 #include "VesselRegister.h"
 
 using namespace std;
-using namespace PLMD;
+namespace PLMD{
+namespace vesselbase{
 
 void ActionWithVessel::registerKeywords(Keywords& keys){
   keys.add("optional","TOL","when accumulating sums quantities that contribute less than this will be ignored.");
@@ -206,3 +207,6 @@ void ActionWithVessel::calculateAllVessels( const int& stepn ){
 void ActionWithVessel::retrieveDomain( std::string& min, std::string& max ){
   plumed_massert(0, "If your function is periodic you need to add a retrieveDomain function so that ActionWithVessel can retrieve the domain");
 }
+
+}
+}
diff --git a/src/vessel-base/ActionWithVessel.h b/src/vessel-base/ActionWithVessel.h
index fcf19aa061280164e117b725f9077004974e1584..22adc0ea7fab11b92a6eeda8981320818ca0ab82 100644
--- a/src/vessel-base/ActionWithVessel.h
+++ b/src/vessel-base/ActionWithVessel.h
@@ -29,9 +29,11 @@
 #include <vector>
 
 namespace PLMD{
+class Value;
+
+namespace vesselbase{
 
 class Vessel;
-class Value;
 
 /**
 \ingroup MULTIINHERIT
@@ -169,4 +171,5 @@ Vessel* ActionWithVessel::getPntrToVessel( const unsigned& i ){
 }
 
 } 
+}
 #endif
diff --git a/src/vessel-base/NormedSumVessel.cpp b/src/vessel-base/NormedSumVessel.cpp
index ffe57499408510b35eec89bbff5b9638b77f689c..66d100e5449a59db6375ebda34400b122ef45c26 100644
--- a/src/vessel-base/NormedSumVessel.cpp
+++ b/src/vessel-base/NormedSumVessel.cpp
@@ -23,6 +23,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 NormedSumVessel::NormedSumVessel( const VesselOptions& da ):
 VesselAccumulator(da),
@@ -95,3 +96,4 @@ void NormedSumVessel::finish( const double& tolerance ){
 }
 
 }
+}
diff --git a/src/vessel-base/NormedSumVessel.h b/src/vessel-base/NormedSumVessel.h
index 3af883a8d9dbd4ac3b37aa54cae8ae42d3c0943a..c111d8ff8b7458704d603a922f9f8bcc24dfdfb1 100644
--- a/src/vessel-base/NormedSumVessel.h
+++ b/src/vessel-base/NormedSumVessel.h
@@ -28,6 +28,7 @@
 #include "VesselAccumulator.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class NormedSumVessel : public VesselAccumulator {
 private:
@@ -49,5 +50,6 @@ public:
   virtual void compute( const unsigned& , const unsigned& , Value& )=0;
 };
 
+}
 }
 #endif
diff --git a/src/vessel-base/SumVessel.cpp b/src/vessel-base/SumVessel.cpp
index ddffb2e02f24ef3d5cfdfeaf0166bbde31f6599c..70923af22250fac479c0d07b14dc679c2c842294 100644
--- a/src/vessel-base/SumVessel.cpp
+++ b/src/vessel-base/SumVessel.cpp
@@ -23,6 +23,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 SumVessel::SumVessel( const VesselOptions& da ):
 VesselAccumulator(da)
@@ -57,5 +58,6 @@ void SumVessel::finish( const double& tolerance ){
       copy( myvalue2, getPntrToOutput(i) );
   }
 }
+}
 
 }
diff --git a/src/vessel-base/SumVessel.h b/src/vessel-base/SumVessel.h
index e4b0306dc44d313f7d6161c425bfd36205e12110..feba6ed7ec75ab7877a94690376813a3ac8a05d7 100644
--- a/src/vessel-base/SumVessel.h
+++ b/src/vessel-base/SumVessel.h
@@ -28,6 +28,7 @@
 #include "VesselAccumulator.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class SumVessel : public VesselAccumulator {
 private:
@@ -44,5 +45,6 @@ public:
   virtual double final_computations( const unsigned& , const double& , double& );
 };
 
+}
 }
 #endif
diff --git a/src/vessel-base/Vessel.cpp b/src/vessel-base/Vessel.cpp
index 863a609a7b09587a71eb3f85e332d5650f0702cf..8721ef831915b61605716e7e7eaaa50053f8555b 100644
--- a/src/vessel-base/Vessel.cpp
+++ b/src/vessel-base/Vessel.cpp
@@ -26,6 +26,7 @@
 #include "tools/Log.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 VesselOptions::VesselOptions(const std::string& thisname, const std::string& params, ActionWithVessel* aa ):
 myname(thisname),
@@ -63,3 +64,4 @@ void Vessel::error( const std::string& msg ){
 }
 
 }
+}
diff --git a/src/vessel-base/Vessel.h b/src/vessel-base/Vessel.h
index 1ab1ddeafbde78f8b6328ff81181fbf71ec61849..3e10eed44e8b6e88f71c0ac786a8b4c1b77a03a7 100644
--- a/src/vessel-base/Vessel.h
+++ b/src/vessel-base/Vessel.h
@@ -30,6 +30,11 @@
 
 namespace PLMD{
 
+class PlumedCommunicator;
+class Log;
+
+namespace vesselbase{
+
 /**
 \ingroup TOOLBOX
 Vessel is an abstract base class.  The classes that inherit
@@ -40,8 +45,6 @@ on.  This class is used in PLMD::ActionWithVessel.
 
 class ActionWithVessel;
 class Vessel;
-class Log;
-class PlumedCommunicator;
 
 /// This class is used to pass the input to Vessels 
 class VesselOptions {
@@ -146,5 +149,6 @@ double Vessel::getBufferElement( const unsigned& i ) const {
   return data_buffer[i];
 } 
 
+}
 }
 #endif
diff --git a/src/vessel-base/VesselAccumulator.cpp b/src/vessel-base/VesselAccumulator.cpp
index 951a13f75ba331b01a5866e1be2c42c1bc310a9f..8c9b0e59b7be1abcfe1abd6ed6b833762493f436 100644
--- a/src/vessel-base/VesselAccumulator.cpp
+++ b/src/vessel-base/VesselAccumulator.cpp
@@ -23,6 +23,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 VesselAccumulator::VesselAccumulator( const VesselOptions& da ):
 VesselValueAccess(da),
@@ -65,4 +66,5 @@ bool VesselAccumulator::applyForce( std::vector<double>& forces ){
 }
 
 }
+}
 
diff --git a/src/vessel-base/VesselAccumulator.h b/src/vessel-base/VesselAccumulator.h
index 465e8e4983ee2fe6872e8e3e37a52ad85abbf274..9506d59dae3ca9c0b8c9342fa7fcf3e07331676b 100644
--- a/src/vessel-base/VesselAccumulator.h
+++ b/src/vessel-base/VesselAccumulator.h
@@ -28,6 +28,7 @@
 #include "VesselValueAccess.h"
 
 namespace PLMD {
+namespace vesselbase {
 
 class VesselAccumulator : public VesselValueAccess {
 private:
@@ -64,6 +65,7 @@ unsigned VesselAccumulator::getNumberOfValues() const {
 }
 
 
+}
 }
 #endif
 
diff --git a/src/vessel-base/VesselLessThan.cpp b/src/vessel-base/VesselLessThan.cpp
index 58930505117167f15a805f20008e01c788d91e76..79a51c645bdf1a8c6583bf4642c45d18e55cd244 100644
--- a/src/vessel-base/VesselLessThan.cpp
+++ b/src/vessel-base/VesselLessThan.cpp
@@ -26,6 +26,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselLessThan : public SumVessel {
 private:
@@ -69,3 +70,4 @@ double VesselLessThan::compute( const unsigned& i, const double& val, double& df
 }
 
 }
+}
diff --git a/src/vessel-base/VesselMin.cpp b/src/vessel-base/VesselMin.cpp
index ca12ce1fb072f59dce111c5a4e61ee714d07eb62..145f9cce74c3222fc2d114d021b8f790d4421d13 100644
--- a/src/vessel-base/VesselMin.cpp
+++ b/src/vessel-base/VesselMin.cpp
@@ -24,6 +24,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselMin : public SumVessel {
 private:
@@ -76,3 +77,4 @@ double VesselMin::final_computations( const unsigned& i, const double& valin, do
 }
 
 }
+}
diff --git a/src/vessel-base/VesselMoment.cpp b/src/vessel-base/VesselMoment.cpp
index 151d53b12fea4058ba6aa40c9c4e159b2b0d6445..d7c846569556122574c46c20bf204f0095a4a9e5 100644
--- a/src/vessel-base/VesselMoment.cpp
+++ b/src/vessel-base/VesselMoment.cpp
@@ -25,6 +25,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselMoment : public VesselStoreAllValues {
 private:
@@ -131,3 +132,4 @@ bool VesselMoment::applyForce( std::vector<double>& forces ){
 }
 
 }
+}
diff --git a/src/vessel-base/VesselMoreThan.cpp b/src/vessel-base/VesselMoreThan.cpp
index 495c9806a22e68d7906985acb4271115108c771b..16b7ded5b921cc22956af5ecdc97f9c590257444 100644
--- a/src/vessel-base/VesselMoreThan.cpp
+++ b/src/vessel-base/VesselMoreThan.cpp
@@ -26,6 +26,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselMoreThan : public SumVessel {
 private:
@@ -70,3 +71,4 @@ double VesselMoreThan::compute( const unsigned& i, const double& val, double& df
 }
 
 }
+}
diff --git a/src/vessel-base/VesselRegister.cpp b/src/vessel-base/VesselRegister.cpp
index eaa75759ee745cafbd1c361573bc84ef38746dd7..f57bfc05529018ab7d1ff4897c2cb56a8a247deb 100644
--- a/src/vessel-base/VesselRegister.cpp
+++ b/src/vessel-base/VesselRegister.cpp
@@ -23,6 +23,7 @@
 #include "VesselRegister.h"
 
 namespace PLMD{
+namespace vesselbase{
 
 VesselRegister::~VesselRegister(){
   if(m.size()>0){
@@ -68,3 +69,4 @@ Keywords VesselRegister::getKeywords(){
 }
 
 }
+}
diff --git a/src/vessel-base/VesselRegister.h b/src/vessel-base/VesselRegister.h
index 84a7aaaf4d394f32454a72bd6da5b18014331247..c4f15d66be25f0e3ad5a60baba5edc50f24130ca 100644
--- a/src/vessel-base/VesselRegister.h
+++ b/src/vessel-base/VesselRegister.h
@@ -30,6 +30,7 @@
 #include "Tools/Keywords.h"
 
 namespace PLMD{
+namespace vesselbase{
 
 class Vessel;
 class VesselOptions;
@@ -63,11 +64,12 @@ VesselRegister& vesselRegister();
 
 #define PLUMED_REGISTER_VESSEL(classname,keyword) \
   static class classname##RegisterMe{ \
-    static PLMD::Vessel * create(const PLMD::VesselOptions&da){return new classname(da);} \
+    static PLMD::vesselbase::Vessel * create(const PLMD::vesselbase::VesselOptions&da){return new classname(da);} \
   public: \
-    classname##RegisterMe(){PLMD::vesselRegister().add(keyword,create,classname::reserveKeyword);}; \
-    ~classname##RegisterMe(){PLMD::vesselRegister().remove(create);}; \
+    classname##RegisterMe(){PLMD::vesselbase::vesselRegister().add(keyword,create,classname::reserveKeyword);}; \
+    ~classname##RegisterMe(){PLMD::vesselbase::vesselRegister().remove(create);}; \
   } classname##RegisterMeObject;
 
+}
 }
 #endif
diff --git a/src/vessel-base/VesselStoreAllValues.cpp b/src/vessel-base/VesselStoreAllValues.cpp
index 14e7653e14c6c048fcc809bde13b02968917ba7f..15428743e4aff4f76c37365c7f4ba2f5a48e5a47 100644
--- a/src/vessel-base/VesselStoreAllValues.cpp
+++ b/src/vessel-base/VesselStoreAllValues.cpp
@@ -23,6 +23,7 @@
 #include "VesselStoreAllValues.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 VesselStoreAllValues::VesselStoreAllValues( const VesselOptions& da ):
 VesselValueAccess(da)
@@ -48,4 +49,5 @@ bool VesselStoreAllValues::calculate( const unsigned& i, const double& tolerance
 
 }
 
+}
 
diff --git a/src/vessel-base/VesselStoreAllValues.h b/src/vessel-base/VesselStoreAllValues.h
index cd3bccc50c352e3904c271015ba14e9f99d9b90f..42f8844eb54d88f0b1a9b0bce9fe50131c13ffc2 100644
--- a/src/vessel-base/VesselStoreAllValues.h
+++ b/src/vessel-base/VesselStoreAllValues.h
@@ -28,6 +28,7 @@
 #include "VesselValueAccess.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselStoreAllValues : public VesselValueAccess {
 public:
@@ -41,5 +42,6 @@ public:
   virtual void local_resizing()=0;
 };
 
+}
 }
 #endif
diff --git a/src/vessel-base/VesselSum.cpp b/src/vessel-base/VesselSum.cpp
index 537718903297ea1839ed2416931b8a01997ed7ac..1855f2de4b3ccfc853de3e350a8e3ace026fbaa1 100644
--- a/src/vessel-base/VesselSum.cpp
+++ b/src/vessel-base/VesselSum.cpp
@@ -24,6 +24,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselSum : public SumVessel {
 public:
@@ -51,3 +52,4 @@ double VesselSum::compute( const unsigned& i, const double& val, double& df ){
 }
 
 }
+}
diff --git a/src/vessel-base/VesselValueAccess.cpp b/src/vessel-base/VesselValueAccess.cpp
index ab38908782d502e8f227dbf104617b6e5debf43b..78fb425e77aef1f9752f05b1d5c4e95fe5b87202 100644
--- a/src/vessel-base/VesselValueAccess.cpp
+++ b/src/vessel-base/VesselValueAccess.cpp
@@ -23,6 +23,7 @@
 #include "ActionWithVessel.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 VesselValueAccess::VesselValueAccess( const VesselOptions& da ) :
 Vessel(da)
@@ -42,3 +43,4 @@ void VesselValueAccess::setValueSizes( const std::vector<unsigned>& val_sizes ){
 }
 
 }
+}
diff --git a/src/vessel-base/VesselValueAccess.h b/src/vessel-base/VesselValueAccess.h
index a89a9983b5b77240952fd27c9af52e3781cc603b..7efd2d444e82e63301ad71d76e630499d9ea03ca 100644
--- a/src/vessel-base/VesselValueAccess.h
+++ b/src/vessel-base/VesselValueAccess.h
@@ -29,6 +29,7 @@
 #include "core/Value.h"
 
 namespace PLMD {
+namespace vesselbase{
 
 class VesselValueAccess : public Vessel {
 private:
@@ -66,5 +67,6 @@ double VesselValueAccess::getValue( const unsigned& icv ) const {
    return getBufferElement( value_starts[icv] );
 }
 
+}
 }  
 #endif