diff --git a/conf/type/__group/TODO b/conf/type/__group/TODO
new file mode 100644
index 00000000..c20a5d21
--- /dev/null
+++ b/conf/type/__group/TODO
@@ -0,0 +1,2 @@
+- delete groups
+
diff --git a/conf/type/__group/explorer/group b/conf/type/__group/explorer/group
new file mode 100755
index 00000000..4c1e6ac0
--- /dev/null
+++ b/conf/type/__group/explorer/group
@@ -0,0 +1,27 @@
+#!/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 .
+#
+#
+# Get an existing groups group entry.
+#
+
+name=$__object_id
+
+getent group "$name" || true
+
diff --git a/conf/type/__group/explorer/gshadow b/conf/type/__group/explorer/gshadow
new file mode 100755
index 00000000..51d502a1
--- /dev/null
+++ b/conf/type/__group/explorer/gshadow
@@ -0,0 +1,27 @@
+#!/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 .
+#
+#
+# Get an existing groups gshadow entry.
+#
+
+name=$__object_id
+
+getent gshadow "$name" || true
+
diff --git a/conf/type/__group/gencode b/conf/type/__group/gencode
new file mode 100755
index 00000000..527a6079
--- /dev/null
+++ b/conf/type/__group/gencode
@@ -0,0 +1,66 @@
+#!/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 groups.
+#
+
+name="$__object_id"
+
+command=
+if grep -q "^$name" "$__object/explorer/group"; then
+ # group exists
+ command="groupmod"
+else
+ # group does not exist
+ command="groupadd"
+fi
+
+
+get_current_value() {
+ local key="$1"
+ local index
+ case "$key" in
+ password)
+ cut -d':' -f 2 "$__object/explorer/gshadow"
+ break
+ ;;
+ gid) index=3;;
+ esac
+ cut -d':' -f $index "$__object/explorer/group"
+}
+
+
+set -- "$@"
+cd "$__object/parameter"
+for property in $(ls .); do
+ current_value=$(get_current_value "$property")
+ new_value="$(cat "$property")"
+ if [ "$new_value" != "$current_value" ]; then
+ # Shedule changed properties for update
+ set -- "$@" "--$property" \"$new_value\"
+ fi
+done
+
+
+if [ $# -gt 0 ]; then
+ # Update changed properties
+ echo $command $@ $name
+fi
+
diff --git a/conf/type/__group/man.text b/conf/type/__group/man.text
new file mode 100644
index 00000000..e571c7c5
--- /dev/null
+++ b/conf/type/__group/man.text
@@ -0,0 +1,62 @@
+cdist-type__user(7)
+===================
+Steven Armstrong
+
+
+NAME
+----
+cdist-type__user - Manage users
+
+
+DESCRIPTION
+-----------
+This cdist type allows you to create or modify users on the target.
+
+
+REQUIRED PARAMETERS
+-------------------
+None.
+
+
+OPTIONAL PARAMETERS
+-------------------
+comment::
+ see usermod(8)
+home::
+ see above
+gid::
+ see above
+groups::
+ see above
+password::
+ see above
+shell::
+ see above
+uid::
+ see above
+
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+# Create user account for foobar with operating system default settings
+__user foobar
+
+# Same but with a different shell
+__user foobar --shell /bin/zsh
+
+# Set explicit uid and home
+__user foobar --uid 1001 --shell /bin/zsh --home /home/foobar
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+
+
+COPYING
+-------
+Copyright \(C) 2011 Steven Armstrong. Free use of this software is
+granted under the terms of the GNU General Public License version 3 (GPLv3).
diff --git a/conf/type/__group/parameter/optional b/conf/type/__group/parameter/optional
new file mode 100644
index 00000000..4c661c8f
--- /dev/null
+++ b/conf/type/__group/parameter/optional
@@ -0,0 +1,2 @@
+gid
+password