diff --git a/pykat/components.py b/pykat/components.py
index fa2e91503c8a55ace8be17ce009c270095c15354..7931e3a1ce3ef0af153e7e00c82163ea6fc0fd8c 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -198,7 +198,20 @@ class Component(object):
         del self._params[:]
 
         self.__removed = True
-            
+    
+    def __deepcopy__(self, memo):
+        cls = self.__class__
+        result = cls.__new__(cls)
+        memo[id(self)] = result
+        
+        for k, v in self.__dict__.items():
+            setattr(result, k, deepcopy(v, memo))
+        
+        for p in result._params:
+            p._updateOwner(result)
+        
+        return result
+        
 class AbstractMirrorComponent(Component):
     __metaclass__ = abc.ABCMeta
         
diff --git a/pykat/param.py b/pykat/param.py
index 31fe7c36839d30d32e0db1946062aa94ceda8d8e..a5bb11dee3400392edea62544d8d6c85cea6c2da 100644
--- a/pykat/param.py
+++ b/pykat/param.py
@@ -87,6 +87,15 @@ class Param(putable, putter):
         putter.__init__(self, var_name, isPutter)
             
         putable.__init__(self, owner.name, name, isPutable)
+    
+    def _updateOwner(self, newOwner):
+        """
+        This updates the internal weak reference to link a parameter to who owns it.
+        Should only be called by the __deepcopy__ component method to ensure things
+        are kept up to date.
+        """
+        del self._owner
+        self._owner = weakref.ref(newOwner)
         
     @property
     def canFsig(self): return self._canFsig