diff --git a/cdist/conf/type/__apt_mark/explorer/state b/cdist/conf/type/__apt_mark/explorer/state
new file mode 100644
index 00000000..3b70003a
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/explorer/state
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# 2016 Ander Punnar (cdist at kvlt.ee)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see <http://www.gnu.org/licenses/>.
+#
+
+if [ -f "$__object/parameter/name" ]; then
+    name="$(cat "$__object/parameter/name")"
+else
+    name="$__object_id"
+fi
+
+apt-mark showhold | grep -q $name && echo hold || echo unhold
diff --git a/cdist/conf/type/__apt_mark/gencode-remote b/cdist/conf/type/__apt_mark/gencode-remote
index 76e87660..d83e96d9 100644
--- a/cdist/conf/type/__apt_mark/gencode-remote
+++ b/cdist/conf/type/__apt_mark/gencode-remote
@@ -24,14 +24,20 @@ else
     name="$__object_id"
 fi
 
-state="$(cat "$__object/parameter/state")"
+state_should="$(cat "$__object/parameter/state")"
 
-case "$state" in
+state_is="$(cat "$__object/explorer/state")"
+
+if [ "$state_should" = "$state_is" ]; then
+    exit 0
+fi
+
+case "$state_should" in
     auto|manual|hold|unhold)
-        echo "apt-mark $state $name"
+        echo "apt-mark $state_should $name"
     ;;
     *)
-        echo "Unknown state: $state" >&2
+        echo "Unknown state: $state_should" >&2
         exit 1
     ;;
 esac