diff --git a/src/Atoms.cpp b/src/Atoms.cpp
index 3095c7dae1dcca82ea3374e8392ddfb02cb08e8a..e7fcef1a3d29758450654ad3a9c4d9489a3785f9 100644
--- a/src/Atoms.cpp
+++ b/src/Atoms.cpp
@@ -322,19 +322,19 @@ void Atoms::removeGroup(const std::string&name){
 }
 
 void Atoms::writeBinary(std::ostream&o)const{
-  o.write((const char*)&positions[0][0],natoms*3*sizeof(double));
-  o.write((const char*)&masses[0],natoms*sizeof(double));
-  o.write((const char*)&charges[0],natoms*sizeof(double));
-  o.write((const char*)&box(0,0),9*sizeof(double));
-  o.write((const char*)&energy,sizeof(double));
+  o.write(reinterpret_cast<const char*>(&positions[0][0]),natoms*3*sizeof(double));
+  o.write(reinterpret_cast<const char*>(&masses[0]),natoms*sizeof(double));
+  o.write(reinterpret_cast<const char*>(&charges[0]),natoms*sizeof(double));
+  o.write(reinterpret_cast<const char*>(&box(0,0)),9*sizeof(double));
+  o.write(reinterpret_cast<const char*>(&energy),sizeof(double));
 }
 
 void Atoms::readBinary(std::istream&i){
-  i.read((char*)&positions[0][0],natoms*3*sizeof(double));
-  i.read((char*)&masses[0],natoms*sizeof(double));
-  i.read((char*)&charges[0],natoms*sizeof(double));
-  i.read((char*)&box(0,0),9*sizeof(double));
-  i.read((char*)&energy,sizeof(double));
+  i.read(reinterpret_cast<char*>(&positions[0][0]),natoms*3*sizeof(double));
+  i.read(reinterpret_cast<char*>(&masses[0]),natoms*sizeof(double));
+  i.read(reinterpret_cast<char*>(&charges[0]),natoms*sizeof(double));
+  i.read(reinterpret_cast<char*>(&box(0,0)),9*sizeof(double));
+  i.read(reinterpret_cast<char*>(&energy),sizeof(double));
 }
 
 double Atoms::getKBoltzmann()const{
diff --git a/src/GREX.cpp b/src/GREX.cpp
index 00a4ad23e80d5c474f53424e783e4910888c4a5e..6271e5fb3fa11bb8c2e29f208e149c923ad4a61a 100644
--- a/src/GREX.cpp
+++ b/src/GREX.cpp
@@ -73,8 +73,8 @@ void GREX::cmd(const string&key,void*val){
      int nw=words.size();
      if(false){
      } else if(nw==2 && words[0]=="getDeltaBias"){
-       assert(allDeltaBias.size()==intercomm.Get_size());
-       int rep;
+       assert(allDeltaBias.size()==static_cast<unsigned>(intercomm.Get_size()));
+       unsigned rep;
        Tools::convert(words[1],rep);
        assert(rep>=0 && rep<allDeltaBias.size());
        double d=allDeltaBias[rep]/(atoms.getMDUnits().energy/atoms.getUnits().energy);
diff --git a/src/PlumedMain.cpp b/src/PlumedMain.cpp
index 134071a70a38145d212956f157c1317fc166607e..feb1326536c8dd86d75ed3123d1afccd1e7c7f94 100644
--- a/src/PlumedMain.cpp
+++ b/src/PlumedMain.cpp
@@ -17,8 +17,8 @@ using namespace PLMD;
 using namespace std;
 
 PlumedMain::PlumedMain():
-  initialized(false),
   grex(NULL),
+  initialized(false),
   log(comm),
   step(0),
   active(false),
@@ -217,7 +217,7 @@ void PlumedMain::cmd(const std::string & word,void*val){
        if(!grex) grex=new GREX(*this);
        assert(grex);
        std::string kk=words[1];
-       for(int i=2;i<words.size();i++) kk+=" "+words[i];
+       for(unsigned i=2;i<words.size();i++) kk+=" "+words[i];
        grex->cmd(kk.c_str(),val);
      } else{
    // error
diff --git a/src/Tools.cpp b/src/Tools.cpp
index 6b08d2b42473d19db32b07ca73303a48ce6b8b6e..9e79c5c4e2ea11dc04b4380a48361647cd4314dd 100644
--- a/src/Tools.cpp
+++ b/src/Tools.cpp
@@ -15,6 +15,15 @@ bool Tools::convert(const string & str,int & t){
         return remaining.length()==0;
 }
 
+bool Tools::convert(const string & str,unsigned & t){
+        istringstream istr(str.c_str());
+        bool ok=istr>>t;
+        if(!ok) return false;
+        string remaining;
+        istr>>remaining;
+        return remaining.length()==0;
+}
+
 bool Tools::convert(const string & str,AtomNumber &a){
   int i;
   bool r=convert(str,i);
diff --git a/src/Tools.h b/src/Tools.h
index 7ab3937aabddebf9283ea5add8cfb2d5c4b468f0..b398ca0533849f2873f5b1b77bb2df0f5662c55b 100644
--- a/src/Tools.h
+++ b/src/Tools.h
@@ -33,6 +33,8 @@ public:
   static bool convert(const std::string & str,double & t);
 /// Convert a string to a int, reading it
   static bool convert(const std::string & str,int & t);
+/// Convert a string to an unsigned int, reading it
+  static bool convert(const std::string & str,unsigned & t);
 /// Convert a string to a atom number, reading it
   static bool convert(const std::string & str,AtomNumber & t);
 /// Convert a string to a string (i.e. copy)