diff --git a/HACKERS_README b/HACKERS_README
index 62f55b94..48df9258 100755
--- a/HACKERS_README
+++ b/HACKERS_README
@@ -33,6 +33,7 @@ export __cdist_out_objects=${base}/objects
export __cdist_out_explorers=${base}/explorers
export __cdist_out_execs=${base}/exec
-cdist-deploy-to localhost
+target="${1:-localhost}"
+cdist-deploy-to "$target"
find "${base}"
diff --git a/conf/manifests/init b/conf/manifests/init
index a64be309..376c675d 100755
--- a/conf/manifests/init
+++ b/conf/manifests/init
@@ -13,4 +13,9 @@ case "$__cdist_target_host" in
__package qemu-kvm --wtf installed
__package tftpd-hpa --fancyoption installed
;;
+
+ icarus)
+ __package tree --ensure installed
+ ;;
+
esac
diff --git a/conf/types/__package/hints b/conf/types/__package/hints
index 76fbcae6..86282e3b 100644
--- a/conf/types/__package/hints
+++ b/conf/types/__package/hints
@@ -1,2 +1,7 @@
install/pacman:
pacman --noconfirm --noprogressbar -S
+--------------------------------------------------------------------------------
+
+ensure: What state the package should be in: present | absent | latest | versionstring (1.0.3)
+name: The package name as used by the packaging system
+
diff --git a/conf/types/__package/manifest b/conf/types/__package/manifest
new file mode 100755
index 00000000..5ac1ae7b
--- /dev/null
+++ b/conf/types/__package/manifest
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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 .
+#
+#
+# __package is an abstract type which dispatches to the lower level
+# __package_$name types which do the actual interaction with the packaging
+# system.
+#
+
+. cdist-config
+
+object_id="$1"; shift
+
+if [ -f type ]; then
+ type="$(cat type)"
+else
+ # Default to value taken from explorer
+ type="$(cat $__cdist_out_explorers/pkg_system)"
+fi
+
+set -- "$@" "$object_id"
+for property in $(ls .); do
+ if [ "$property" != "type" ]; then
+ set -- "$@" "--$property" "$(cat $property)"
+ fi
+done
+
+__package_$type "$@"
+
+exit 0
diff --git a/conf/types/__package/parameters/optional b/conf/types/__package/parameters/optional
new file mode 100644
index 00000000..d3598a51
--- /dev/null
+++ b/conf/types/__package/parameters/optional
@@ -0,0 +1,2 @@
+name
+type
diff --git a/conf/types/__package/parameters/required b/conf/types/__package/parameters/required
new file mode 100644
index 00000000..5f0c1c12
--- /dev/null
+++ b/conf/types/__package/parameters/required
@@ -0,0 +1 @@
+ensure
diff --git a/conf/types/__package_emerge/gencode b/conf/types/__package_emerge/gencode
new file mode 100755
index 00000000..e4313c5c
--- /dev/null
+++ b/conf/types/__package_emerge/gencode
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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 .
+#
+#
+# Manage packages on gentoo.
+#
+
+. cdist-config
+
+object_id="$1"; shift
+
+if [ -f name ]; then
+ name="$(cat name)"
+else
+ name="$object_id"
+fi
+
+
+# FIXME: super simple proof of concept
+echo "emerge -q \"$name\""
+
+exit 0
diff --git a/conf/types/__package_emerge/hints b/conf/types/__package_emerge/hints
new file mode 100644
index 00000000..86282e3b
--- /dev/null
+++ b/conf/types/__package_emerge/hints
@@ -0,0 +1,7 @@
+install/pacman:
+pacman --noconfirm --noprogressbar -S
+--------------------------------------------------------------------------------
+
+ensure: What state the package should be in: present | absent | latest | versionstring (1.0.3)
+name: The package name as used by the packaging system
+
diff --git a/conf/types/__package_emerge/parameters/optional b/conf/types/__package_emerge/parameters/optional
new file mode 100644
index 00000000..f121bdbf
--- /dev/null
+++ b/conf/types/__package_emerge/parameters/optional
@@ -0,0 +1 @@
+name
diff --git a/conf/types/__package_emerge/parameters/required b/conf/types/__package_emerge/parameters/required
new file mode 100644
index 00000000..5f0c1c12
--- /dev/null
+++ b/conf/types/__package_emerge/parameters/required
@@ -0,0 +1 @@
+ensure