diff --git a/cdist/conf/type/__key_value/gencode-remote b/cdist/conf/type/__key_value/gencode-remote
index b3ffeb46..5fa24d5b 100755
--- a/cdist/conf/type/__key_value/gencode-remote
+++ b/cdist/conf/type/__key_value/gencode-remote
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2012 Nico Schottelius (nico-cdist at schottelius.org)
 #
 # This file is part of cdist.
 #
@@ -18,42 +19,42 @@
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
 
-key="$(cat "$__object/parameter/key")"
+key="$__object_id"
+[ -f "$__object/parameter/key" ] && key="$(cat "$__object/parameter/key")"
+state_should=present
+[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
+
 file="$(cat "$__object/parameter/file")"
 delimiter="$(cat "$__object/parameter/delimiter")"
 value="$(cat "$__object/parameter/value")"
 
 state_is="$(cat "$__object/explorer/state")"
-state_should="$(cat "$__object/parameter/state")"
 
-if [ "$state_is" = "$state_should" ]; then
-   # nothing to do
-   exit 0
-fi
+[ "$state_is" = "$state_should" ] && exit 0
 
 case "$state_should" in
-   absent)
-      # remove lines starting with key
-      echo "sed '/^$key\($delimiter\+\)/d' \"$file\" > \"$file.cdist-tmp\""
-      echo "mv \"$file.cdist-tmp\" \"$file\""
-   ;;
-   present)
-      case "$state_is" in
-         absent)
-            # add new key and value
-            echo "echo \"${key}${delimiter}${value}\" >> \"$file\""
-         ;;
-         wrongvalue)
-            # change exisiting value
-            echo "sed \"s|^$key\($delimiter\+\).*|$key\1$value|\" \"$file\" > \"$file.cdist-tmp\""
-            echo "mv \"$file.cdist-tmp\" \"$file\""
-         ;;
-         *)
-            echo "Unknown explorer state: $state_is" >&2
-            exit 1
-      esac
-   ;;
-   *)
-      echo "Unknown state: $state_should" >&2
-      exit 1
+    absent)
+        # remove lines starting with key
+        echo "sed '/^$key\($delimiter\+\)/d' \"$file\" > \"$file.cdist-tmp\""
+        echo "mv \"$file.cdist-tmp\" \"$file\""
+    ;;
+    present)
+        case "$state_is" in
+            absent)
+                # add new key and value
+                echo "echo \"${key}${delimiter}${value}\" >> \"$file\""
+            ;;
+            wrongvalue)
+                # change exisiting value
+                echo "sed \"s|^$key\($delimiter\+\).*|$key\1$value|\" \"$file\" > \"$file.cdist-tmp\""
+                echo "mv \"$file.cdist-tmp\" \"$file\""
+            ;;
+            *)
+                echo "Unknown explorer state: $state_is" >&2
+                exit 1
+        esac
+    ;;
+    *)
+       echo "Unknown state: $state_should" >&2
+       exit 1
 esac 
diff --git a/cdist/conf/type/__key_value/manifest b/cdist/conf/type/__key_value/manifest
index 2e75e175..8ed9cc9c 100755
--- a/cdist/conf/type/__key_value/manifest
+++ b/cdist/conf/type/__key_value/manifest
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2012 Nico Schottelius (nico-cdist at schottelius.org)
 #
 # This file is part of cdist.
 #
@@ -18,13 +19,10 @@
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
 
-# set defaults
-key="$(cat "$__object/parameter/key" 2>/dev/null \
-   || echo "$__object_id" | tee "$__object/parameter/key")"
-state="$(cat "$__object/parameter/state" 2>/dev/null \
-   || echo "present" | tee "$__object/parameter/state")"
+state_should=present
+[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
 
-if [ "$state" = "present" -a ! -f "$__object/parameter/value" ]; then
+if [ "$state_should" = "present" -a ! -f "$__object/parameter/value" ]; then
    echo "Missing required parameter 'value'" >&2
    exit 1
 fi