diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp
index 6ff69f1107f30dabca0f59ed7b94c3f2fd5df01a..3317468ef9a71013cd5854e4e17526659c86cc19 100644
--- a/src/cltools/Driver.cpp
+++ b/src/cltools/Driver.cpp
@@ -738,7 +738,7 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc) {
         matrix box;
         rvec* pos=new rvec[natoms];
         float prec,lambda;
-        int ret;
+        int ret=exdrOK;
         if(trajectory_fmt=="xdr-xtc") ret=read_xtc(xd,natoms,&localstep,&time,box,pos,&prec);
         if(trajectory_fmt=="xdr-trr") ret=read_trr(xd,natoms,&localstep,&time,&lambda,box,pos,NULL,NULL);
         if(stride==0) step=localstep;
diff --git a/src/gridtools/FindContourSurface.cpp b/src/gridtools/FindContourSurface.cpp
index 8ffcaa716819abdad6722b15ad1eea0ef8f2c74b..4cbf9ded2e52a80ff49dd2468af27523090c1690 100644
--- a/src/gridtools/FindContourSurface.cpp
+++ b/src/gridtools/FindContourSurface.cpp
@@ -210,7 +210,7 @@ void FindContourSurface::finishAveraging() {
 }
 
 void FindContourSurface::compute( const unsigned& current, MultiValue& myvals ) const {
-  std::vector<unsigned> neighbours; unsigned num_neighbours; unsigned nfound=0; double minv=0, minp;
+  std::vector<unsigned> neighbours; unsigned num_neighbours; unsigned nfound=0; double minv=0, minp=0;
   std::vector<unsigned> bins_n( ingrid->getNbin() ); unsigned shiftn=current;
   std::vector<unsigned> ind( ingrid->getDimension() ); std::vector<double> point( ingrid->getDimension() );
 #ifndef DNDEBUG
diff --git a/src/multicolvar/MultiColvarBase.cpp b/src/multicolvar/MultiColvarBase.cpp
index 987eb1532a5ef96b668a75c0c8dfb635eb1bdcad..ee5d4ffa296625c812ae028a7109084ae5f21987 100644
--- a/src/multicolvar/MultiColvarBase.cpp
+++ b/src/multicolvar/MultiColvarBase.cpp
@@ -32,6 +32,7 @@
 #include "CatomPack.h"
 #include <vector>
 #include <string>
+#include <limits>
 
 using namespace std;
 
@@ -696,7 +697,7 @@ void MultiColvarBase::calculate() {
   if( !usespecies && ablocks.size()>1 ) {
     // This loop finds the first active atom, which is always checked because
     // of a peculiarity in linkcells
-    unsigned first_active;
+    unsigned first_active=std::numeric_limits<unsigned>::max();
     for(unsigned i=0; i<ablocks[0].size(); ++i) {
       if( !isCurrentlyActive( ablocks[1][i] ) ) continue;
       else {