diff --git a/utils/new_module b/utils/new_module
index ece1b4d7b99ee42db556472b7222c8fca2d8f64b..2b681966acf258280a66b4d9de2f8fba11138d17 100755
--- a/utils/new_module
+++ b/utils/new_module
@@ -26,7 +26,7 @@ topdir="$(dirname "$0")"
 
 function usage() {
     cat <<EOF
-Usage: $prog [options] <module name> <author name> <author email address>
+Usage: $prog [options] <module name> <author name> <author email address> <github_user>
 
 Create new ansible-freeipa module using templates.
 
@@ -71,12 +71,14 @@ fi
 name=$1
 author=$2
 email=$3
+github_user=$4
 year=$(date +"%Y")
 
-if [ -z "$name" ] || [ -z "$author" ] || [ -z "$email" ]; then
+if [ -z "$name" ] || [ -z "$author" ] || [ -z "$email" ] || [ -z "$github_user" ]; then
     [ -z "$name" ] && echo "ERROR: name is not valid"
     [ -z "$author" ] && echo "ERROR: author is not valid"
     [ -z "$email" ] && echo "ERROR: email is not valid"
+    [ -z "$githubuser" ] && echo "ERROR: github_user is not valid"
     echo
     usage;
     exit 1;
@@ -143,6 +145,7 @@ function template() {
         -e "s/\${name^}/${name^}/g" \
         -e "s/\$author/$author/g" \
         -e "s/\$email/$email/" \
+        -e "s/\$github/$github_user/" \
         -e "s/\$year/$year/" \
         "$topdir/templates/$s" > "$d"
 }
diff --git a/utils/templates/README-module+member.md.in b/utils/templates/README-module+member.md.in
index 4ed0d1d1edb9be83d736d46b5ef67a44f6eba472..6fda8f943894ab8b8ebf6c3af7a1b537c7e0e8b3 100644
--- a/utils/templates/README-module+member.md.in
+++ b/utils/templates/README-module+member.md.in
@@ -119,8 +119,8 @@ Variable | Description | Required
 `ipaapi_context` | The context in which the module will execute. Executing in a server context is preferred. If not provided context will be determined by the execution environment. Valid values are `server` and `client`. | no
 `ipaapi_ldap_cache` | Use LDAP cache for IPA connection. The bool setting defaults to yes. (bool) | no
 `name` \| `ALIAS` | The list of $name name strings. | yes
-`PARAMETER1` \| `API_PARAMETER_NAME` | DESCRIPTION | BOOL
-`PARAMETER2` \| `API_PARAMETER_NAME` | DESCRIPTION | BOOL
+`PARAMETER1` \| `API_PARAMETER_NAME` | DESCRIPTION | TYPE
+`PARAMETER2` \| `API_PARAMETER_NAME` | DESCRIPTION | TYPE
 `action` | Work on $name or member level. It can be on of `member` or `$name` and defaults to `$name`. | no
 `state` | The state to ensure. It can be one of `present`, `absent`, default: `present`. | no
 
diff --git a/utils/templates/README-module.md.in b/utils/templates/README-module.md.in
index 44f291e31a2ec3975a6c2ebb1cc609676377bc14..08faf50534078545ae571b741c13a2c3ec424820 100644
--- a/utils/templates/README-module.md.in
+++ b/utils/templates/README-module.md.in
@@ -84,8 +84,8 @@ Variable | Description | Required
 `ipaapi_context` | The context in which the module will execute. Executing in a server context is preferred. If not provided context will be determined by the execution environment. Valid values are `server` and `client`. | no
 `ipaapi_ldap_cache` | Use LDAP cache for IPA connection. The bool setting defaults to yes. (bool) | no
 `name` \| `ALIAS` | The list of $name name strings. | yes
-`PARAMETER1` \| `API_PARAMETER_NAME` | DESCRIPTION | BOOL
-`PARAMETER2` \| `API_PARAMETER_NAME` | DESCRIPTION | BOOL
+`PARAMETER1` \| `API_PARAMETER_NAME` | DESCRIPTION | TYPE
+`PARAMETER2` \| `API_PARAMETER_NAME` | DESCRIPTION | TYPE
 `state` | The state to ensure. It can be one of `present`, `absent`, default: `present`. | no
 
 
diff --git a/utils/templates/ipamodule+member.py.in b/utils/templates/ipamodule+member.py.in
index d3e2153ebb6c86884164c8f63e76417f397475ab..5ce5cf1b34beb3d0b2a9d5dae05d57eb7e8edf0f 100644
--- a/utils/templates/ipamodule+member.py.in
+++ b/utils/templates/ipamodule+member.py.in
@@ -41,25 +41,35 @@ options:
   name:
     description: The list of $name name strings.
     required: true
+    type: list
+    elements: str
     aliases: ["API_PARAMETER_NAME"]
   PARAMETER1:
     description: DESCRIPTION
-    required: REQUIRED
+    required: false
+    default: None
+    type: TYPE
     aliases: ["API_PARAMETER_NAME"]
   PARAMETER2:
     description: member DESCRIPTION
-    required: REQUIRED
+    required: false
+    type: list
+    elements: str
+    default: None
+    type: TYPE
     aliases: ["API_PARAMETER_NAME"]
   action:
     description: Work on $name or member level.
     choices: ["$name", "member"]
     default: $name
-    required: false
+    type: str
   state:
     description: The state to ensure.
     choices: ["present", "absent"]
     default: present
-    required: true
+    type: str
+author:
+  - $author (@$github)
 """
 
 EXAMPLES = """
@@ -139,17 +149,18 @@ def main():
     ansible_module = IPAAnsibleModule(
         argument_spec=dict(
             # general
-            name=dict(type="list", aliases=["API_PARAMETER_NAME"],
-                      default=None, required=True),
+            name=dict(type="list", elements="str", required=True
+                      aliases=["API_PARAMETER_NAME"]),
             # present
-            PARAMETER1=dict(required=False, type='str',
-                            aliases=["API_PARAMETER_NAME"], default=None),
-            PARAMETER2=dict(required=False, type='list',
-                            aliases=["API_PARAMETER_NAME"], default=None),
-            action=dict(type="str", default="$name",
+            PARAMETER1=dict(required=False, type="str",
+                            default=None, aliases=["API_PARAMETER_NAME"]),
+            PARAMETER2=dict(required=False, type='list', elements='str',
+                            default=None, aliases=["API_PARAMETER_NAME"]),
+            # action
+            action=dict(type="str", default="$name", type="str",
                         choices=["member", "$name"]),
             # state
-            state=dict(type="str", default="present",
+            state=dict(type="str", default="present", type="str",
                        choices=["present", "absent"]),
         ),
         supports_check_mode=True,
diff --git a/utils/templates/ipamodule.py.in b/utils/templates/ipamodule.py.in
index 0e13fa5d5cc0e716cada0ac8c85f98a8e5494531..833d5a88a55bd286ff41dee76884c8b3c377e514 100644
--- a/utils/templates/ipamodule.py.in
+++ b/utils/templates/ipamodule.py.in
@@ -41,20 +41,27 @@ options:
   name:
     description: The list of $name name strings.
     required: true
+    type: list
+    elements: str
     aliases: ["API_PARAMETER_NAME"]
   PARAMETER1:
     description: DESCRIPTION
     required: REQUIRED
+    type: str
     aliases: ["API_PARAMETER_NAME"]
   PARAMETER2:
     description: DESCRIPTION
     required: REQUIRED
+    type: list
+    elements: str
     aliases: ["API_PARAMETER_NAME"]
   state:
     description: The state to ensure.
     choices: ["present", "absent"]
     default: present
-    required: true
+    type: str
+author:
+  - $author (@$github)
 """
 
 EXAMPLES = """
@@ -113,15 +120,15 @@ def main():
     ansible_module = IPAAnsibleModule(
         argument_spec=dict(
             # general
-            name=dict(type="list", aliases=["API_PARAMETER_NAME"],
-                      default=None, required=True),
+            name=dict(type="list", elements="str", required=True,
+                      aliases=["API_PARAMETER_NAME"],
             # present
             PARAMETER1=dict(required=False, type='str',
                             aliases=["API_PARAMETER_NAME"], default=None),
-            PARAMETER2=dict(required=False, type='list',
+            PARAMETER2=dict(required=False, type='list', elements='str',
                             aliases=["API_PARAMETER_NAME"], default=None),
             # state
-            state=dict(type="str", default="present",
+            state=dict(type="str", default="present", type="str",
                        choices=["present", "absent"]),
         ),
         supports_check_mode=True,