diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py
index a02fc58d97f370d45f36a465c38fa3caf3da9d41..dab3384862d7529b531be0d689febbacfc72c2af 100644
--- a/loopy/kernel/array.py
+++ b/loopy/kernel/array.py
@@ -862,6 +862,17 @@ class ArrayBase(ImmutableRecord):
     def __repr__(self):
         return "<%s>" % self.__str__()
 
+    def update_persistent_hash_for_shape(self, key_hash, key_builder, shape):
+        if isinstance(shape, tuple):
+            for shape_i in shape:
+                if shape_i is None:
+                    key_builder.rec(key_hash, shape_i)
+                else:
+                    key_builder.update_for_pymbolic_expression(key_hash, shape_i)
+        else:
+            key_builder.rec(key_hash, shape)
+
+
     def update_persistent_hash(self, key_hash, key_builder):
         """Custom hash computation function for use with
         :class:`pytools.persistent_dict.PersistentDict`.
@@ -869,14 +880,7 @@ class ArrayBase(ImmutableRecord):
 
         key_builder.rec(key_hash, self.name)
         key_builder.rec(key_hash, self.dtype)
-        if isinstance(self.shape, tuple):
-            for shape_i in self.shape:
-                if shape_i is None:
-                    key_builder.rec(key_hash, shape_i)
-                else:
-                    key_builder.update_for_pymbolic_expression(key_hash, shape_i)
-        else:
-            key_builder.rec(key_hash, self.shape)
+        self.update_persistent_hash_for_shape(key_hash, key_builder, self.shape)
         key_builder.rec(key_hash, self.dim_tags)
         key_builder.rec(key_hash, self.offset)
         key_builder.rec(key_hash, self.dim_names)
diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py
index 001dd06326edcad14d8ecd39e29229dd45de8ef2..94b31df12dae516d3539438b7e4ed66ed765e697 100644
--- a/loopy/kernel/data.py
+++ b/loopy/kernel/data.py
@@ -497,7 +497,8 @@ class TemporaryVariable(ArrayBase):
         """
 
         super(TemporaryVariable, self).update_persistent_hash(key_hash, key_builder)
-        key_builder.rec(key_hash, self.storage_shape)
+        self.update_persistent_hash_for_shape(key_hash, key_builder,
+                self.storage_shape)
         key_builder.rec(key_hash, self.base_indices)
 
         initializer = self.initializer
@@ -510,7 +511,7 @@ class TemporaryVariable(ArrayBase):
 # }}}
 
 
-# {{{ subsitution rule
+# {{{ substitution rule
 
 class SubstitutionRule(ImmutableRecord):
     """