diff --git a/pyopencl/invoker.py b/pyopencl/invoker.py
index c996768d97d8f9a3e58a99e4839db5f37143128e..f4e97615a82ea740121d1123296afd75a19dc0b8 100644
--- a/pyopencl/invoker.py
+++ b/pyopencl/invoker.py
@@ -81,10 +81,10 @@ def generate_generic_arg_handler(gen, arg_idx, arg_var):
     from pytools.py_codegen import Indentation
 
     gen("""
-        if {arg_var} is None:
-            self._set_arg_null({arg_idx})
-        elif isinstance({arg_var}, _KERNEL_ARG_CLASSES):
+        if isinstance({arg_var}, _KERNEL_ARG_CLASSES):
             self.set_arg({arg_idx}, {arg_var})
+        elif {arg_var} is None:
+            self._set_arg_null({arg_idx})
         """
         .format(arg_idx=arg_idx, arg_var=arg_var))
 
@@ -341,7 +341,7 @@ def _generate_enqueue_and_set_args_module(function_name,
 
 
 invoker_cache = WriteOncePersistentDict(
-        "pyopencl-invoker-cache-v7",
+        "pyopencl-invoker-cache-v11",
         key_builder=_NumpyTypesKeyBuilder())