diff --git a/src/mio/node.py b/src/mio/node.py
index e5519bcb1c451c963e479c0265a2ae37a7cee810..6a22076ec2e51014d0204da45aa60ac73440e8d4 100755
--- a/src/mio/node.py
+++ b/src/mio/node.py
@@ -283,7 +283,7 @@ class file_node(target_node):
                         return True
                     else:
                         raise Exception("%s is a link" % self.target)
-    
+
                 if source_sum != target_sum:
                     self.action.append(self.copy)
                     return True
@@ -384,8 +384,10 @@ class symlink_node(target_node):
     def __init__(self, name, decl=None, group=None):
         target_node.__init__(self, 'symlink', name, decl, group)
         self.action = []
-        self.uid = mio.util.uid(decl)
-        self.gid = mio.util.gid(decl)
+        if decl:
+            self.uid = mio.util.uid(decl)
+            self.gid = mio.util.gid(decl)
+            self.delete = parse_boolean(self.decl.delete[0])                
        
     def assert_identical(self, other):
         if self.__cmp__(other) != 0:
@@ -396,12 +398,22 @@ class symlink_node(target_node):
             raise OwnerException(self, other)
         if self.gid != other.gid:
             raise GroupException(self, other)
+        if self.delete != other.delete:
+            raise DeleteException(self, other)
     
     def do_trig(self, prefix):
         result = False
         self.target = mio.filecache.locatedir([prefix, self.decl.name[0]])
         
-        if os.path.islink(self.target):
+        if self.delete:
+            if os.path.exists(self.target):
+                if not os.path.islink(self.target):
+                    raise Exception("%s is not a link" % self.target)
+                self.action.append(self.unlink)
+                return True
+            else:
+                return False
+        elif os.path.islink(self.target):
             if os.readlink(self.target) != self.decl.value[0]:
                 self.action.append(self.unlink)
                 self.action.append(self.symlink)