diff --git a/cdist/conf/type/__link/explorer/state b/cdist/conf/type/__link/explorer/state
index a9220a3c..48278d9e 100755
--- a/cdist/conf/type/__link/explorer/state
+++ b/cdist/conf/type/__link/explorer/state
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
 #
 # This file is part of cdist.
 #
@@ -34,8 +34,12 @@ case "$type" in
    symbolic)
       cd "$destination_dir"
       source_is=$(ls -l "$destination" | sed 's/.*-> //g')
-      if [ -h "$destination" -a "$source_is" = "$source" ]; then
-         echo present
+      if [ -h "$destination" ]; then
+         if [ "$source_is" = "$source" ]; then
+            echo present
+         else
+            echo wrongsource
+         fi
       else
          echo absent
       fi
diff --git a/cdist/conf/type/__link/gencode-remote b/cdist/conf/type/__link/gencode-remote
index cbdfd30f..7582863f 100755
--- a/cdist/conf/type/__link/gencode-remote
+++ b/cdist/conf/type/__link/gencode-remote
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
-# 2013 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc)
 #
 # This file is part of cdist.
 #
@@ -18,9 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
-#
-# Mostly a wrapper for ln
-#
 
 destination="/$__object_id"
 
@@ -55,6 +52,10 @@ rm -rf "$destination"
 DONE
         fi
 
+        if [ "$state_is" = "wrongsource" ]; then
+            printf 'rm -f "%s"\n' "$destination"
+        fi
+
         # create our link
         cat << DONE
 ln ${lnopt} -f "$source" "$destination"