diff --git a/pykat/freeze.py b/pykat/freeze.py
new file mode 100644
index 0000000000000000000000000000000000000000..20a24a7c4152f1143ed5888220240afa04bda72a
--- /dev/null
+++ b/pykat/freeze.py
@@ -0,0 +1,25 @@
+import warnings
+
+def canFreeze(cls):
+    
+    def _freeze(self): self.__dict__["____FROZEN____"] = True
+    def _unfreeze(self): self.__dict__["____FROZEN____"] = False
+    
+    def frozensetattr(self, name, value):
+        if "____FROZEN____" in self.__dict__ and self.__dict__["____FROZEN____"] and not hasattr(self, name):
+            if hasattr(self, "name"):
+                n = self.name
+            elif hasattr(self, "__name"):
+                n = self.__name
+            else:
+                n = self.__class__.__name__
+                
+            warnings.warn("'%s' does not have attribute called '%s'" % (n, name), stacklevel=2)
+            
+        super(cls, self).__setattr__(name, value)
+
+    cls.__setattr__ = frozensetattr
+    cls._freeze = _freeze
+    cls._unfreeze = _unfreeze
+    
+    return cls
\ No newline at end of file