diff --git a/conf/type/__package_apt/explorer/pkg_status b/conf/type/__package_apt/explorer/pkg_status
index 86b94825..249e4638 100755
--- a/conf/type/__package_apt/explorer/pkg_status
+++ b/conf/type/__package_apt/explorer/pkg_status
@@ -28,4 +28,11 @@ else
 fi
 
 # Except dpkg failing, if package is not known / installed
-dpkg -s "$name" 2>/dev/null || exit 0
+packages="$(apt-cache showpkg "$name" | grep -A 20 "Reverse Provides:" | sed 1d | cut -d ' ' -f 1) $name"
+for p in $packages; do
+    if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then
+       echo "installed $p"
+       exit 0
+    fi
+done
+echo "removed"
diff --git a/conf/type/__package_apt/gencode-remote b/conf/type/__package_apt/gencode-remote
index a5384ee3..594ab8cb 100755
--- a/conf/type/__package_apt/gencode-remote
+++ b/conf/type/__package_apt/gencode-remote
@@ -27,26 +27,29 @@ else
    name="$__object_id"
 fi
 
-state="$(cat "$__object/parameter/state")"
-is_installed="$(grep "^Status: install ok installed" "$__object/explorer/pkg_status" || true)"
+state_should="$(cat "$__object/parameter/state")"
+state_is="$(cat "$__object/explorer/pkg_status")"
+case "$state_is" in
+    installed*)
+       name="$(echo "$state_is" | cut -d ' ' -f 2)"
+       state_is="installed"
+    ;;
+esac
 
 aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes"
 
-case "$state" in
-   installed)
-      # Install only if non-existent
-      if [ -z "$is_installed" ]; then
+if [ "$state_is" != "$state_should" ]; then
+   case "$state_should" in
+      installed)
          echo $aptget install \"$name\"
-      fi
-   ;;
-   removed)
-      # Remove only if existent
-      if [ -n "$is_installed" ]; then
+      ;;
+      removed)
          echo $aptget remove \"$name\"
-      fi
-   ;;
-   *)
-      echo "Unknown state: $state" >&2
-      exit 1
-   ;;
-esac
+      ;;
+      *)
+         echo "Unknown state: $state" >&2
+         exit 1
+      ;;
+   esac
+fi
+