diff --git a/bin/build-helper b/bin/build-helper
index 1698a678..9a776491 100755
--- a/bin/build-helper
+++ b/bin/build-helper
@@ -451,7 +451,7 @@ eof
     ;;
 
     shellcheck-scripts)
-        ${SHELLCHECKCMD} scripts/cdist-dump || exit 0
+        ${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type || exit 0
     ;;
 
     shellcheck-gencodes)
diff --git a/docs/changelog b/docs/changelog
index b8071ffe..acf462f2 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -5,6 +5,7 @@ next:
 	* Type __consul: Add alpine support (Nico Schottelius)
 	* Type __consul: Add version 1.5.0 (Nico Schottelius)
 	* Type __consul_agent: Add alpine support (Nico Schottelius)
+	* New helper script: cdist-new-type (Steven Armstrong, Darko Poljak)
 
 5.0.2: 2019-05-17
 	* Type __package_apk: Fix @repo handling in explorer (Nico Schottelius)
diff --git a/docs/src/cdist-troubleshooting.rst b/docs/src/cdist-troubleshooting.rst
index 6b7fb4af..e639aafd 100644
--- a/docs/src/cdist-troubleshooting.rst
+++ b/docs/src/cdist-troubleshooting.rst
@@ -47,7 +47,8 @@ you write to use the -e flag:
 Using debug dump helper script
 ------------------------------
 Since cdist stores data to local cache that can be used for debugging there
-is a helper script that dumps data from local cache.
+is a helper script that dumps data from local cache,
+`cdist-dump <man1/cdist-dump.html>`_.
 
 For more info see:
 
diff --git a/docs/src/cdist-type.rst b/docs/src/cdist-type.rst
index 7e5e39ef..880df819 100644
--- a/docs/src/cdist-type.rst
+++ b/docs/src/cdist-type.rst
@@ -93,6 +93,9 @@ they are written in shell so they are executed using '/bin/sh -e' or 'CDIST_LOCA
 
 For executable shell code it is suggested that shebang is '#!/bin/sh -e'.
 
+For creating type skeleton you can use helper script
+`cdist-new-type <man1/cdist-new-type.html>`_.
+
 
 Defining parameters
 -------------------
diff --git a/docs/src/index.rst b/docs/src/index.rst
index 95e44d52..6cbd938a 100644
--- a/docs/src/index.rst
+++ b/docs/src/index.rst
@@ -22,6 +22,7 @@ is being used in small up to enterprise grade environments.
    cdist-real-world
    man1/cdist
    man1/cdist-dump
+   man1/cdist-new-type
    cdist-bootstrap
    cdist-configuration
    cdist-manifest
diff --git a/docs/src/man1/cdist-new-type.rst b/docs/src/man1/cdist-new-type.rst
new file mode 100644
index 00000000..f1a8b992
--- /dev/null
+++ b/docs/src/man1/cdist-new-type.rst
@@ -0,0 +1,74 @@
+cdist-new-type(1)
+=================
+
+NAME
+----
+cdist-new-type - Create new type skeleton
+
+
+SYNOPSIS
+--------
+
+::
+
+    cdist-new-type TYPE-NAME AUTHOR-NAME AUTHOR-EMAIL [TYPE-BASE-PATH]
+
+
+
+DESCRIPTION
+-----------
+cdist-new-type is a helper script that creates new type skeleton.
+It is then up to the type author to finish the type.
+
+It creates skeletons for the following files:
+
+* man.rst
+* manifest
+* gencode-remote.
+
+Upon creation it prints the path to the newly created type directory.
+
+
+ARGUMENTS
+---------
+**TYPE-NAME**
+   Name of the new type.
+
+**AUTHOR-NAME**
+   Type author's full name.
+
+**AUTHOR-NAME**
+   Type author's email.
+
+**TYPE-BASE-PATH**
+    Path to the base directory of the type. If not set it defaults
+    to '$PWD/type'.
+
+
+EXAMPLES
+--------
+
+.. code-block:: sh
+
+    # Create new type __foo in ~/.cdist directory.
+    $ cd ~/.cdist
+    $ cdist-new-type '__foo' 'Foo Bar' 'foo.bar at foobar.org'
+    /home/foo/.cdist/type/__foo
+
+
+SEE ALSO
+--------
+:strong:`cdist`\ (1)
+
+
+AUTHORS
+-------
+
+| Steven Armstrong <steven-cdist--@--armstrong.cc>
+| Darko Poljak <darko.poljak--@--ungleich.ch>
+
+
+COPYING
+-------
+Copyright \(C) 2019 Steven Armstrong, Darko Poljak. Free use of this software is
+granted under the terms of the GNU General Public License v3 or later (GPLv3+).
diff --git a/scripts/cdist-new-type b/scripts/cdist-new-type
new file mode 100755
index 00000000..79dcfd90
--- /dev/null
+++ b/scripts/cdist-new-type
@@ -0,0 +1,159 @@
+#!/bin/sh
+
+basename="${0##*/}"
+
+if [ $# -lt 3 ]
+then
+    printf "usage: %s TYPE-NAME AUTHOR-NAME AUTHOR-EMAIL [TYPE-BASE-PATH]
+    TYPE-NAME       Name of the type.
+    AUTHOR-NAME     Type author's full name.
+    AUTHOR-EMAIL    Type author's email.
+    TYPE-BASE-PATH  Path to the base directory of the type. If not set it defaults
+                    to '\$PWD/type'.\n" "${basename}"
+    exit 1
+fi
+
+type_name="$1"
+shift
+author_name="$1"
+shift
+author_email="$1"
+shift
+
+if [ $# -ge 1 ]
+then
+    type_base_path="$1"
+    shift
+else
+    #type_base_path=~/.cdist/type
+    type_base_path="$PWD/type"
+fi
+
+error() {
+   printf "%s\n" "$*" >&2
+}
+
+die() {
+   error "$@"
+   exit 1
+}
+
+cd "$type_base_path" || die "Could not change to type directory: $type_base_path.
+You have to specify type base path or run me from within a cdist conf directory,
+e.g. ~/.cdist."
+
+year=$(date +%Y)
+copyright="# $year $author_name ($author_email)"
+
+license="# 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 <http://www.gnu.org/licenses/>.
+#
+"
+
+set -e
+
+mkdir "$type_name"
+cd "$type_name"
+
+### man page
+header="cdist-type${type_name}(7)"
+header_length="${#header}"
+cat >> man.rst << DONE
+$header
+$(while [ "${header_length}" -gt 0 ]; do printf "="; header_length=$((header_length - 1)); done; printf "\n";)
+
+NAME
+----
+cdist-type${type_name} - TODO
+
+
+DESCRIPTION
+-----------
+This space intentionally left blank.
+
+
+REQUIRED PARAMETERS
+-------------------
+None.
+
+
+OPTIONAL PARAMETERS
+-------------------
+None.
+
+
+BOOLEAN PARAMETERS
+------------------
+None.
+
+
+EXAMPLES
+--------
+
+.. code-block:: sh
+
+    # TODO
+    ${type_name}
+
+
+SEE ALSO
+--------
+:strong:\`TODO\`\\ (7)
+
+
+AUTHORS
+-------
+$author_name <$author_email>
+
+
+COPYING
+-------
+Copyright \(C) $year $author_name. 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.
+DONE
+
+### manifest
+cat >> manifest << DONE
+#!/bin/sh -e
+#
+${copyright}
+#
+${license}
+
+os=\$(cat "\$__global/explorer/os")
+
+case "\$os" in
+   *)
+      printf "Your operating system (%s) is currently not supported by this type (%s)\n" "\$os" "\${__type##*/}" >&2
+      printf "Please contribute an implementation for it if you can.\n" >&2
+      exit 1
+   ;;
+esac
+DONE
+chmod +x manifest
+
+# gencode-remote
+cat >> gencode-remote << DONE
+#!/bin/sh -e
+#
+${copyright}
+#
+${license}
+DONE
+chmod +x gencode-remote
+
+printf "%s/%s\n" "$type_base_path" "$type_name"
diff --git a/setup.py b/setup.py
index 5f14a2f4..ae651125 100644
--- a/setup.py
+++ b/setup.py
@@ -36,7 +36,7 @@ setup(
     name="cdist",
     packages=["cdist", "cdist.core", "cdist.exec", "cdist.util", ],
     package_data={'cdist': package_data},
-    scripts=["scripts/cdist", "scripts/cdist-dump"],
+    scripts=["scripts/cdist", "scripts/cdist-dump", "scripts/cdist-new-type"],
     version=cdist.version.VERSION,
     description="A Usable Configuration Management System",
     author="Nico Schottelius",