diff --git a/pykat/components.py b/pykat/components.py
index d5e1f17a32dac5f830b440720587c6a074e93b1d..fa29d7b795438f4edb1381f9899daeb3f967ffde 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -159,6 +159,11 @@ class Component(object):
     def remove(self):
         self._kat.remove(self)
         
+        # inform all parameters that we have removed its owner
+        # so that it can then warn about any puts/vars/xaxis
+        for p in self._params:
+            p._onOwnerRemoved()
+        
         del self._params[:]
 
         self.__removed = True
diff --git a/pykat/gui/graphics.py b/pykat/gui/graphics.py
index 8172e38d1a8f269bf08881e1a2d63049bee5541a..58bcf39b9941d5050cba0749579ead01a25a794b 100644
--- a/pykat/gui/graphics.py
+++ b/pykat/gui/graphics.py
@@ -143,15 +143,11 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
         
     
 class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
-    
-    def __on_component_deleted(self, arg):
-        import gc
-        print gc.get_referrers(self)
         
     def __init__(self, svgfile, component, nodes):
         QGraphicsSvgItem.__init__(self,svgfile)
         self.__nodeGraphics = []
-        self.__component = weakref.ref(component, self.__on_component_deleted)
+        self.__component = weakref.ref(component)
         
         # this signals the itemChange() method when this item is moved
         # used for refreshing the spaces between components
diff --git a/pykat/gui/gui.py b/pykat/gui/gui.py
index 4d71109ae493c1dc1f9d4a50cf555ad96163ce12..a6cdb947759dd33e23b9f254a83bf9428177b6c9 100644
--- a/pykat/gui/gui.py
+++ b/pykat/gui/gui.py
@@ -87,7 +87,6 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
             
             for n in nodes:
                 for cc in self._kat.nodes.getNodeComponents(n):
-                    print "refresh", cc 
                     if cc != None:
                         ccitm = cc.getQGraphicsItem()
                         if ccitm != None:
@@ -145,7 +144,10 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
 
         self.kat.add(l)
         self.addComponentToScene(l,x,y)   
-     
+    
+    def deleteComponent(self, comp):
+        comp.component.remove()
+    
     def disconnect(self, node):
         comps = self.kat.nodes.getNodeComponents(node)
         
@@ -231,7 +233,8 @@ class pyKatGraphicsView(QGraphicsView):
             if isinstance(item, ComponentQGraphicsItem):           
                 menu.addSeparator()
                 menu.addAction("Edit")
-                menu.addAction("Delete")
+                action = menu.addAction("Delete")
+                action.triggered.connect(functools.partial(gui.deleteComponent, item))
             if isinstance(item,NodeQGraphicItem):
                 menu.addSeparator()
                 comps = self._kat.nodes.getNodeComponents(item.node)
diff --git a/pykat/param.py b/pykat/param.py
index 2376114f0d36995a467c372ddbb247eb5f260d8b..cd732b165006db3dc1c09d47a04e0216da2516ce 100644
--- a/pykat/param.py
+++ b/pykat/param.py
@@ -27,9 +27,13 @@ class putable(object):
         
         if self._putter != None:
             self._putter.put_count -= 1
+            self._putter.putees.remove(self)
         
         self._putter = var
-        self._putter.put_count += 1
+        
+        if var != None:
+            self._putter.put_count += 1
+            self._putter.putees.append(self)
         
     def _getPutFinesseText(self):
         rtn = []
@@ -49,6 +53,7 @@ class putter(object):
         self._put_name = put_name
         self.put_count = 0
         self._isPutter = isPutter
+        self.putees = [] # list of params that this puts to
     
     @property
     def isPutter(self): return self._isPutter
@@ -87,6 +92,9 @@ class Param(putable, putter):
     @property
     def canFsig(self): return self._canFsig
     
+    @property
+    def owner(self): return self._owner()
+    
     @property
     def fsig_name(self): return self.__fsig_name
     
@@ -136,7 +144,27 @@ class Param(putable, putter):
             rtn.append("set {put_name} {comp} {param}".format(put_name=self.put_name(), comp=self._owner().name, param=self.name))
         
         return rtn
-        
+    
+    def _onOwnerRemoved(self):
+        #if this param can be put somewhere we need to check if it is
+        if self.isPutable:
+            for a in self.putees:
+                print "Removing put from {0} {1} to {2} {3}".format(self.owner.name, self.name, a.owner.name, a.name)
+                a._putter = None
+                self.put_count -= 1
+                
+            # delete any references left over
+            del self.putees[:]
+        
+        # check if we have anything being put to us
+        if self.isPutter:
+            if self._putter != None:
+                print "Removing put from {0} {1} to {2} {3}".format(self._putter.owner.name, self._putter.name, self.owner.name, self.name)
+                self._putter.put_count -= 1
+                self._putter.putees.remove(self)
+                self._putter = None
+       
+       
     def __mul__(self, a):
         return self.value * a