diff --git a/src/Setmiss.c b/src/Setmiss.c
index a25e98cdc12aec3b4e4e434ed7ffd7221fc335af..e135584499b5714c2c008b3ee54716c26c868224 100644
--- a/src/Setmiss.c
+++ b/src/Setmiss.c
@@ -42,32 +42,22 @@ int isnan(const double x);
 
 void *Setmiss(void *argument)
 {
-  int SETMISSVAL, SETCTOMISS, SETMISSTOC, SETRTOMISS, SETVRANGE;
-  int operatorID;
-  int streamID1, streamID2;
-  int gridsize;
   int nrecs, recID;
-  int nvars;
-  int tsID;
   int varID, levelID;
-  int vlistID1, vlistID2;
   int nmiss;
   int i;
-  int calendar;
   double missval, missval2 = 0;
   double rconst = 0, rmin = 0, rmax = 0;
-  double *array;
-  int taxisID1, taxisID2;
 
   cdoInitialize(argument);
 
-  SETMISSVAL   = cdoOperatorAdd("setmissval",    0, 0, "missing value");
-  SETCTOMISS   = cdoOperatorAdd("setctomiss",    0, 0, "constant");
-  SETMISSTOC   = cdoOperatorAdd("setmisstoc",    0, 0, "constant");
-  SETRTOMISS   = cdoOperatorAdd("setrtomiss",    0, 0, "range (min, max)");
-  SETVRANGE    = cdoOperatorAdd("setvrange",     0, 0, "range (min, max)");
+  int SETMISSVAL = cdoOperatorAdd("setmissval", 0, 0, "missing value");
+  int SETCTOMISS = cdoOperatorAdd("setctomiss", 0, 0, "constant");
+  int SETMISSTOC = cdoOperatorAdd("setmisstoc", 0, 0, "constant");
+  int SETRTOMISS = cdoOperatorAdd("setrtomiss", 0, 0, "range (min, max)");
+  int SETVRANGE  = cdoOperatorAdd("setvrange",  0, 0, "range (min, max)");
 
-  operatorID = cdoOperatorID();
+  int operatorID = cdoOperatorID();
 
   if ( operatorID == SETMISSVAL )
     {
@@ -87,7 +77,7 @@ void *Setmiss(void *argument)
 	}
       else
       */
-	rconst = parameter2double(operatorArgv()[0]);
+      rconst = parameter2double(operatorArgv()[0]);
     }
   else
     {
@@ -96,23 +86,34 @@ void *Setmiss(void *argument)
       rmax = parameter2double(operatorArgv()[1]);
     }
 
-  streamID1 = streamOpenRead(cdoStreamName(0));
+  int streamID1 = streamOpenRead(cdoStreamName(0));
 
-  vlistID1 = streamInqVlist(streamID1);
-  vlistID2 = vlistDuplicate(vlistID1);
+  int vlistID1 = streamInqVlist(streamID1);
+  int vlistID2 = vlistDuplicate(vlistID1);
 
-  taxisID1 = vlistInqTaxis(vlistID1);
-  taxisID2 = taxisDuplicate(taxisID1);
+  int taxisID1 = vlistInqTaxis(vlistID1);
+  int taxisID2 = taxisDuplicate(taxisID1);
   vlistDefTaxis(vlistID2, taxisID2);
 
-  calendar = taxisInqCalendar(taxisID1);  
-
   if ( operatorID == SETMISSVAL )
     {
-      nvars = vlistNvars(vlistID2);
+      int nvars = vlistNvars(vlistID2);
       for ( varID = 0; varID < nvars; varID++ )
 	vlistDefVarMissval(vlistID2, varID, missval2);
     }
+  else if ( operatorID == SETMISSTOC )
+    {
+      int nvars = vlistNvars(vlistID2);
+      for ( varID = 0; varID < nvars; varID++ )
+	{
+	  missval = vlistInqVarMissval(vlistID2, varID);
+	  if ( DBL_IS_EQUAL(rconst, missval) )
+	    {
+	      cdoWarning("Missing value and constant have the same value!");
+	      break;
+	    }
+	}
+    }
 
   /*
   if ( operatorID == SETVRANGE )
@@ -126,15 +127,15 @@ void *Setmiss(void *argument)
 	vlistDefAttFlt(vlistID2, varID, "valid_range", DATATYPE_FLT64, 2, range);
     }
   */
-  streamID2 = streamOpenWrite(cdoStreamName(1), cdoFiletype());
+  int streamID2 = streamOpenWrite(cdoStreamName(1), cdoFiletype());
 
   streamDefVlist(streamID2, vlistID2);
 
-  gridsize = vlistGridsizeMax(vlistID1);
+  int gridsize = vlistGridsizeMax(vlistID1);
 
-  array = (double*) malloc(gridsize*sizeof(double));
+  double *array = (double*) malloc(gridsize*sizeof(double));
 
-  tsID = 0;
+  int tsID = 0;
   while ( (nrecs = streamInqTimestep(streamID1, tsID)) )
     {
       taxisCopyTimestep(taxisID2, taxisID1);