diff --git a/fslstats.cc b/fslstats.cc
index eb528b401b8bf34cedf239721624bf0afbb13c63..58f7c773c5dcfef15b498b46fac44cac55ba2989 100644
--- a/fslstats.cc
+++ b/fslstats.cc
@@ -144,7 +144,6 @@ int generate_masks(const volume4D<float> &mask, volume4D<float> &masknz, const v
   return 0;
 }
 
-
 int fmrib_main_float(int argc, char* argv[]) 
 {
 
@@ -153,15 +152,10 @@ int fmrib_main_float(int argc, char* argv[])
   cout.setf(ios::left, ios::adjustfield); 
   cout.precision(6);  
 
-  volume4D<float> vin, vol, mask, masknz;
+  volume4D<float> vol, mask, masknz;
   read_volume4D(vol,argv[1]);
 
   float lthr=0, uthr=0;  // these initial values are not used
-  if (masks_used) {
-    vin = vol;
-    generate_masks(mask,masknz,vin,lthr,uthr);
-    vol = vin * mask;
-  }
 
   int narg=2;
   string sarg;
@@ -216,12 +210,10 @@ int fmrib_main_float(int argc, char* argv[])
       cout << MISCMATHS::round(coord(1)) << " " << 
 	MISCMATHS::round(coord(2)) << " " << MISCMATHS::round(coord(3)) << " ";
     } else if (sarg=="-w") {
-      if (!masks_used) { 
-	if (vin.nvoxels()<1) { vin = vol; }
-	masks_used=true;
-	generate_masks(mask,masknz,vin,lthr,uthr); 
-	vol = vin * mask; 
-      }
+	if (masknz.nvoxels()<1) { //Need to generate non-zeromask 
+	  generate_masks(mask,masknz,vol,lthr,uthr); 
+	  vol*=mask; 
+	}
       int xmin=masknz.maxx(),xmax=masknz.minx(),ymin=masknz.maxy(),ymax=masknz.miny(),zmin=masknz.maxz(),zmax=masknz.minz(),tmin=masknz.maxt(),tmax=masknz.mint();
       
       for(int t=masknz.mint();t<=masknz.maxt();t++) {
@@ -260,13 +252,11 @@ int fmrib_main_float(int argc, char* argv[])
       if (zmin>zmax) { int tmp=zmax;  zmax=zmin;  zmin=tmp; }
       // now output nifti coords
       cout << xmin << " " << 1+xmax-xmin << " " << ymin << " " << 1+ymax-ymin << " " << zmin << " " << 1+zmax-zmin << " " << tmin << " " << 1+tmax-tmin << " ";
-    } else if (sarg=="-e") {
-      if (!masks_used) { 
-	if (vin.nvoxels()<1) { vin = vol; }
-	masks_used=true;
-	generate_masks(mask,masknz,vin,lthr,uthr); 
-	vol = vin * mask; 
-      }
+      } else if (sarg=="-e") {
+	if (mask.nvoxels()<1) {
+	  generate_masks(mask,masknz,vol,lthr,uthr); 
+	  vol*=mask; 
+	}
       ColumnVector hist;
       int nbins=1000;
       double entropy=0;
@@ -279,7 +269,7 @@ int fmrib_main_float(int argc, char* argv[])
       }
       entropy /= log((double) nbins);
       cout << entropy << " ";
-    } else if (sarg=="-E") { 
+      } else if (sarg=="-E") { 
       ColumnVector hist;
       int nbins=1000;
       double entropy=0;
@@ -313,19 +303,11 @@ int fmrib_main_float(int argc, char* argv[])
    	  mask.addvolume(mask[mask.maxt()]);
         }
       }
-      if (!masks_used) {
-	masks_used=true;
-	vin = vol;
-      }
-      float th= 0.5;
-      if (th!=0) {
-        mask.binarise(th);
-      } else {
-        mask.binarise(1);
-      }
-      generate_masks(mask,masknz,vin);
-        if (mask.tsize()!=1) vol=vin*mask; 
-	else vol=vin*mask[0];
+      
+      mask.binarise(0.5);
+      generate_masks(mask,masknz,vol);
+        if (mask.tsize()!=1) vol*=mask; 
+	else vol*=mask[0];
     } else if (sarg=="-l") {
       narg++;
       if (narg<argc) {
@@ -335,12 +317,8 @@ int fmrib_main_float(int argc, char* argv[])
 	exit(2);
       }
       lthr_used=true;
-      if (!masks_used) {
-	masks_used=true;
-	vin = vol;
-      }
-      generate_masks(mask,masknz,vin,lthr,uthr);
-      vol = vin * mask;
+      generate_masks(mask,masknz,vol,lthr,uthr);
+      vol*=mask;
     } else if (sarg=="-u") {
       narg++;
       if (narg<argc) {
@@ -350,12 +328,8 @@ int fmrib_main_float(int argc, char* argv[])
 	exit(2);
       }
       uthr_used=true;
-      if (!masks_used) {
-	masks_used=true;
-	vin = vol;
-      }
-      generate_masks(mask,masknz,vin,lthr,uthr);
-      vol = vin * mask;
+      generate_masks(mask,masknz,vol,lthr,uthr);
+      vol*=mask;
     } else if (sarg=="-a") {
       vol = abs(vol);
     } else if (sarg=="-v") {
@@ -436,11 +410,9 @@ int fmrib_main_float(int argc, char* argv[])
     	cerr << "Percentile must be between 0 and 100" << endl;
     	exit(1);
       }
-      if (!masks_used) {
-	if (vin.nvoxels()<1) { vin = vol; }
-	masks_used=true;
-	generate_masks(mask,masknz,vin,lthr,uthr); 
-	vol = vin * mask; 
+      if (mask.nvoxels()<1) {
+	generate_masks(mask,masknz,vol,lthr,uthr); 
+	vol*=mask; 
       }
       cout << vol.percentile((float) n/100.0,masknz) << " ";
     } else if (sarg=="-h") {