diff --git a/cdist/conf/type/__dog_vdi/gencode-remote b/cdist/conf/type/__dog_vdi/gencode-remote
index 6e4bb4d0..56e4108a 100644
--- a/cdist/conf/type/__dog_vdi/gencode-remote
+++ b/cdist/conf/type/__dog_vdi/gencode-remote
@@ -1,19 +1,42 @@
-################################################################################
-# State: absent is handled by manifest - we need only to do stuff if image is
-# not existing and state != absent
+#!/bin/sh
#
-state="$(cat "$__object/parameter/state")"
-[ "$state" = "absent" ] && exit 0
-
-exists="$(cat "$__object/explorer/exists")"
-[ "$exists" ] && exit 0
-
-################################################################################
-# Still there? Create image
+# 2014 Nico Schottelius (nico-cdist at schottelius.org)
+#
+# 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 .
#
-format="$(cat "$__object/parameter/format")"
-size="$(cat "$__object/parameter/size")"
-diskimage="/$__object_id"
+state_should="$(cat "$__object/parameter/state")"
+num_vdi_lines=$(wc -l < "$__object/explorer/list")
+name="$__object_id"
-echo qemu-img create -f \"$format\" \"$diskimage\" \"$size\"
+
+if [ "$num_vdi_lines" = 1 ]; then
+ state_is=present
+else
+ state_is=absent
+fi
+
+[ "$state_is" = "$state_should" ] && exit 0
+
+case "$state_should" in
+ present)
+ size="$(cat "$__object/parameter/size")"
+ echo "dog vdi create '$name' '$size'"
+ ;;
+ absent)
+ echo "dog vdi delete '$name'"
+ ;;
+esac
diff --git a/cdist/conf/type/__dog_vdi/man.text b/cdist/conf/type/__dog_vdi/man.text
index 444ab15d..d7cc6f88 100644
--- a/cdist/conf/type/__dog_vdi/man.text
+++ b/cdist/conf/type/__dog_vdi/man.text
@@ -10,20 +10,19 @@ cdist-type__dog_vdi - Manage Sheepdog VM images
DESCRIPTION
-----------
-The dog program is used to create qemu images for
-qemu and (qemu-)kvm.
-
-
-REQUIRED PARAMETERS
--------------------
-size::
- Size of the image in dog vdi compatible units.
+The dog program is used to create images for sheepdog
+to be used in qemu.
OPTIONAL PARAMETERS
-------------------
state::
Either "present" or "absent", defaults to "present"
+size::
+ Size of the image in dog vdi compatible units.
+
+ Required if state == present.
+
EXAMPLES
@@ -33,8 +32,14 @@ EXAMPLES
# Create a 50G size image
__dog_vdi nico-privat.sky.ungleich.ch --size 50G
+# Create a 50G size image (more explicit)
+__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state present
+
# Remove image
__dog_vdi nico-privat.sky.ungleich.ch --state absent
+
+# Remove image - keeping --size is ok
+__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state absent
--------------------------------------------------------------------------------
@@ -42,6 +47,7 @@ SEE ALSO
--------
- cdist-type(7)
- dog(8)
+- qemu(1)
COPYING
diff --git a/cdist/conf/type/__dog_vdi/manifest b/cdist/conf/type/__dog_vdi/manifest
new file mode 100644
index 00000000..cd022f28
--- /dev/null
+++ b/cdist/conf/type/__dog_vdi/manifest
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# 2014 Nico Schottelius (nico-cdist at schottelius.org)
+#
+# 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 .
+#
+
+state_should="$(cat "$__object/parameter/state")"
+
+if [ "$state_should" = "present" ]; then
+ if [ ! -f "$__object/parameter/size" ]; then
+ echo "Size is required when state is present" >&2
+ exit 1
+ fi
+fi
diff --git a/cdist/conf/type/__dog_vdi/parameter/default/format b/cdist/conf/type/__dog_vdi/parameter/default/format
deleted file mode 100644
index e0a90ab9..00000000
--- a/cdist/conf/type/__dog_vdi/parameter/default/format
+++ /dev/null
@@ -1 +0,0 @@
-qcow2
diff --git a/cdist/conf/type/__dog_vdi/parameter/optional b/cdist/conf/type/__dog_vdi/parameter/optional
index 71b9a32b..c3ac4490 100644
--- a/cdist/conf/type/__dog_vdi/parameter/optional
+++ b/cdist/conf/type/__dog_vdi/parameter/optional
@@ -1,2 +1,2 @@
-format
state
+size
diff --git a/cdist/conf/type/__dog_vdi/parameter/required b/cdist/conf/type/__dog_vdi/parameter/required
deleted file mode 100644
index 2a613ba5..00000000
--- a/cdist/conf/type/__dog_vdi/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-size