diff --git a/HACKERS_README b/HACKERS_README
index fa01666f..0ae1bdcd 100755
--- a/HACKERS_README
+++ b/HACKERS_README
@@ -33,7 +33,7 @@ set -x
 # Tell the user what we do, so this script makes sense during execution
 
 # prepare use (only from top level directory)
-export PATH="$PATH:$(pwd -P)/bin"
+export PATH="$(pwd -P)/bin:$PATH"
 export __cdist_conf_dir="$(pwd -P)/conf"
 
 # Allow user to supply hostname
diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest
index cf085e2f..d8b55814 100755
--- a/conf/type/__package/manifest
+++ b/conf/type/__package/manifest
@@ -49,5 +49,3 @@ for property in $(ls .); do
 done
 
 __package_$type "$@"
-
-exit 0
diff --git a/doc/man/to_check/cdist-type.text b/doc/man/to_check/cdist-type.text
index 9e9642a1..cd06463e 100644
--- a/doc/man/to_check/cdist-type.text
+++ b/doc/man/to_check/cdist-type.text
@@ -53,11 +53,29 @@ Every time a type is used, a new object is created of the specific type,
 with a type specific unique id that stores the parameters
 
 
+HOW TO USE A TYPE
+-----------------
+You can use types from the initial manifest or the type manifest like a
+normal command:
+
+--------------------------------------------------------------------------------
+# Creates empty file /etc/cdist-configured
+__file /etc/cdist-configured --type file
+
+# Ensure tree is installed
+__package tree --state installed
+--------------------------------------------------------------------------------
+
+Internally cdist-type-emulator(1) will be called from cdist-manifest-run(1) to
+save the given parameters into a cconfig database, so they can be accessed by
+the manifest and gencode scripts of the type (see below).
+
+
 HOW TO WRITE A NEW TYPE
 -----------------------
 A type consists of
 
-- parameter (required)
+- parameter (optional)
 - manifest  (optional)
 - gencode   (optional)
 - explorer  (optional)
@@ -66,43 +84,66 @@ Types are stored below conf/type/. Their name should always be prefixed with
 two underscores (__) to prevent collisions with other binaries in $PATH.
 
 To begin a new type from a template, execute "cdist-type-template __NAME"
-and cd to conf/type/__NAME.
+and cd conf/type/__NAME.
 
 
 DEFINING PARAMETERS
 -------------------
-Every type consists of optional and 
+Every type consists of optional and required parameters, which must
+be created in a newline seperated file in parameters/required and
+parameters/optional. If either or both missing, the type will have
+no required, no optional or no parameters at all.
+
+Example:
+--------------------------------------------------------------------------------
+echo servername >> conf/type/__nginx_vhost/parameter/required
+echo logdirectory >> conf/type/__nginx_vhost/parameter/optional
+--------------------------------------------------------------------------------
 
 
-HOW TO WRITE A NEW TYPE (TODO)
-------------------------------
-Assume you want to create the new type named "coffee", which creates
-files which contain the word "c0ffee".
+WRITING THE MANIFEST
+--------------------
+In the manifest of a type you can use other types, so your type extends
+their functionality. A good example is the __package type, which in
+a shortened version looks like this:
 
-Create the directory conf/type/coffee/.
-Create the file /etc/cdist/types/coffee/README containing a description of the 
-type.
-If your type supports attributes, create the directory /etc/cdist/types/coffee/
-attributes.
-For each attribute, create the file
-   /etc/cdist/types/coffee/attributes/$attribute_name which contains
+--------------------------------------------------------------------------------
+os="$(cat "$__global/explorer/os")"
+case "$os" in
+      archlinux) type="pacman" ;;
+      debian|ubuntu) type="apt" ;;
+      gentoo) type="emerge" ;;
+      *)
+         echo "Don't know how to manage packages on: $os" >&2
+         exit 1
+      ;;
+esac
 
-   a short description on the first line
-   then a blank line
-   then a long description (probably over several lines)
+__package_$type "$@"
+--------------------------------------------------------------------------------
 
-If you think your type may be useful for others, submit it for inclusion
-into cdist at cdist -- at -- l.schottelius.org.
+As you can see, the type can reference different environment variables,
+which are documented in cdist-environment-variables(7).
 
-Create /etc/cdist/types/coffee/init which reads $configinput
-(either via cconfig or via environment) and outputs a block of
-shell code suitable for running on the client.
+Always ensure the manifest is executable, otherwise cdist will not be able
+to execute it.
+
+WRITING THE GENCODE SCRIPT
+--------------------------
+
+HOW TO INCLUDE A TYPE INTO UPSTREAM CDIST
+-----------------------------------------
+If you think your type may be useful for others, ensure it works with the
+current master branch of cdist and submit the git url containing the type for
+inclusion to the mailinglist **cdist at cdist -- at -- l.schottelius.org**.
+
+Ensure there is a corresponding manpage named cdist-type-NAME (without
+underscores) included.
 
 
 SEE ALSO
 --------
-cdist-config-layout(7), cdist-type-manifest(7), cdist-type-explorer(7),
-cdist-type-gencode(7)
+- cdist-manifest-run(1)
 
 
 COPYING