diff --git a/cmake/HysopVersion.cmake b/cmake/HysopVersion.cmake
index 8bc6ff1493dfb7c91d1666af3436f8b35f38a858..c62cd8e1c9f0a6e61e5ea0c46b438c4f4171433e 100644
--- a/cmake/HysopVersion.cmake
+++ b/cmake/HysopVersion.cmake
@@ -1,5 +1,5 @@
 # --- set hysop current version ---
 set(MAJOR_VERSION 2)
-set(MINOR_VERSION 1)
+set(MINOR_VERSION 0)
 set(PATCH_VERSION 0)
-set(HYSOP_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-alpha")
+set(HYSOP_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-rc1")
diff --git a/hysop/backend/device/codegen/base/utils.py b/hysop/backend/device/codegen/base/utils.py
index 253b22c7284969988b74b10525bda1ccbf2cca80..c49157541c2b5ab3f10c91bc1df573e3f7199532 100644
--- a/hysop/backend/device/codegen/base/utils.py
+++ b/hysop/backend/device/codegen/base/utils.py
@@ -135,3 +135,16 @@ class ArgDict(WriteOnceDict):
     # max_fun = sqrt(16**nb) = 2**(2*nb)
     def hash(self,string):
         return hashlib.sha1(string).hexdigest()[:4]
+
+
+class SortedDict(dict):
+    def keys(self):
+        keys = super(SortedDict, self).keys()
+        return sorted(keys, key=str)
+    
+    def values(self):
+        return iter(self.__getitem__[k] for k in self.keys())
+
+    def iteritems(self):
+        return iter((k, self.__getitem__(k)) for k in self.keys())
+
diff --git a/hysop/backend/device/codegen/kernels/custom_symbolic.py b/hysop/backend/device/codegen/kernels/custom_symbolic.py
index 52db53e32c6b377781cab8aa77458e9a440a21ad..b141135efb8b4df7784d208e021529290fed7b16 100644
--- a/hysop/backend/device/codegen/kernels/custom_symbolic.py
+++ b/hysop/backend/device/codegen/kernels/custom_symbolic.py
@@ -237,7 +237,7 @@ class SymbolicCodegenContext(object):
         array_sizes = {}
 
         dfields = set(f.dfield for f in (expr_info.input_dfields.values() + 
-                                                        expr_info.output_dfields.values()))
+                                         expr_info.output_dfields.values()))
 
         for dfield in dfields:
             field = dfield._field
diff --git a/hysop/backend/device/kernel_autotuner.py b/hysop/backend/device/kernel_autotuner.py
index 9ac7834784fe6960c8656b53c8565471583e1453..f402942bf036ec4a503070aa163cf0c223ad2dc9 100644
--- a/hysop/backend/device/kernel_autotuner.py
+++ b/hysop/backend/device/kernel_autotuner.py
@@ -22,7 +22,7 @@ class KernelAutotuner(object):
 
     FULL_RESULTS_KEY = '__FULL_RESULTS__'
     DUMP_LAST_TUNED_KERNEL    = False
-    STORE_FULL_KERNEL_SOURCES = False
+    STORE_FULL_KERNEL_SOURCES = True
     
     @staticmethod 
     def _hash_func():
diff --git a/hysop/operator/base/min_max.py b/hysop/operator/base/min_max.py
index 3f2332fbf922a5e7fd84f0b9baad4f3f0f87d351..33eca8d0526499f3703ed72226749abbe75179d6 100644
--- a/hysop/operator/base/min_max.py
+++ b/hysop/operator/base/min_max.py
@@ -221,15 +221,16 @@ class MinMaxFieldStatisticsBase(object):
         if (Fmin is not None):
             fmin = Fmin().copy()
             for i in components:
-                fmin[i] = dfield.data[i].nanmin().get()
+                fmin[i] = dfield.data[i].min().get()
             Fmin.value = fmin * coeffs['Fmin']
         if (Fmax is not None):
             fmax = Fmax().copy()
             for i in components:
-                fmax[i] = dfield.data[i].nanmax().get()
+                fmax[i] = dfield.data[i].max().get()
             Fmax.value = fmax * coeffs['Fmax']
         if (Finf is not None):
             self.Finf.value = npw.maximum(npw.abs(Fmin()), npw.abs(Fmax())) * coeffs['Finf']
+        # TODO mpi reduce
 
     @debug
     def get_node_requirements(self):