diff --git a/plugins/modules/ipadnsforwardzone.py b/plugins/modules/ipadnsforwardzone.py
index 90bd387652ce30d36c08c056b38163874d98c5d4..b28f28dbe0d950a22472a7cf1a3364a371e0c448 100644
--- a/plugins/modules/ipadnsforwardzone.py
+++ b/plugins/modules/ipadnsforwardzone.py
@@ -134,7 +134,7 @@ def main():
             # general
             ipaadmin_principal=dict(type="str", default="admin"),
             ipaadmin_password=dict(type="str", required=False, no_log=True),
-            name=dict(type="str", aliases=["cn"], default=None,
+            name=dict(type="list", aliases=["cn"], default=None,
                       required=True),
             forwarders=dict(type='list', aliases=["idnsforwarders"],
                             required=False),
@@ -158,7 +158,7 @@ def main():
                                            "ipaadmin_principal")
     ipaadmin_password = module_params_get(ansible_module,
                                           "ipaadmin_password")
-    name = module_params_get(ansible_module, "name")
+    names = module_params_get(ansible_module, "name")
     action = module_params_get(ansible_module, "action")
     forwarders = module_params_get(ansible_module, "forwarders")
     forwardpolicy = module_params_get(ansible_module, "forwardpolicy")
@@ -166,6 +166,12 @@ def main():
                                            "skip_overlap_check")
     state = module_params_get(ansible_module, "state")
 
+    if state == 'present' and len(names) != 1:
+        ansible_module.fail_json(
+            msg="Only one dnsforwardzone can be added at a time.")
+    if state == 'absent' and len(names) < 1:
+        ansible_module.fail_json(msg="No name given.")
+
     # absent stae means delete if the action is NOT member but update if it is
     # if action is member then update an exisiting resource
     # and if action is not member then create a resource
@@ -207,101 +213,102 @@ def main():
                                                  ipaadmin_password)
         api_connect()
 
-        # Make sure forwardzone exists
-        existing_resource = find_dnsforwardzone(ansible_module, name)
-
-        if existing_resource is None and operation == "update":
-            # does not exist and is updating
-            # trying to update something that doesn't exist, so error
-            ansible_module.fail_json(msg="""dnsforwardzone '%s' is not
-                                                     valid""" % (name))
-        elif existing_resource is None and operation == "del":
-            # does not exists and should be absent
-            # set command
-            command = None
-            # enabled or disabled?
-            is_enabled = "IGNORE"
-        elif existing_resource is not None and operation == "del":
-            # exists but should be absent
-            # set command
-            command = "dnsforwardzone_del"
-            # enabled or disabled?
-            is_enabled = "IGNORE"
-        elif forwarders is None:
-            # forwarders are not defined its not a delete, update state?
-            # set command
-            command = None
-            # enabled or disabled?
-            if existing_resource is not None:
-                is_enabled = existing_resource["idnszoneactive"][0]
-            else:
-                is_enabled = "IGNORE"
-        elif existing_resource is not None and operation == "update":
-            # exists and is updating
-            # calculate the new forwarders and mod
-            # determine args
-            if state != "absent":
-                forwarders = list(set(existing_resource["idnsforwarders"]
-                                      + forwarders))
-            else:
-                forwarders = list(set(existing_resource["idnsforwarders"])
-                                  - set(forwarders))
-            args = gen_args(forwarders, forwardpolicy,
-                            skip_overlap_check)
-            if skip_overlap_check is not None:
-                del args['skip_overlap_check']
-
-            # command
-            if not compare_args_ipa(ansible_module, args, existing_resource):
-                command = "dnsforwardzone_mod"
-            else:
+        for name in names:
+            # Make sure forwardzone exists
+            existing_resource = find_dnsforwardzone(ansible_module, name)
+
+            if existing_resource is None and operation == "update":
+                # does not exist and is updating
+                # trying to update something that doesn't exist, so error
+                ansible_module.fail_json(msg="""dnsforwardzone '%s' is not
+                                                         valid""" % (name))
+            elif existing_resource is None and operation == "del":
+                # does not exists and should be absent
+                # set command
                 command = None
-
-            # enabled or disabled?
-            is_enabled = existing_resource["idnszoneactive"][0]
-
-        elif existing_resource is None and operation == "add":
-            # does not exist but should be present
-            # determine args
-            args = gen_args(forwarders, forwardpolicy,
-                            skip_overlap_check)
-            # set command
-            command = "dnsforwardzone_add"
-            # enabled or disabled?
-            is_enabled = "TRUE"
-
-        elif existing_resource is not None and operation == "add":
-            # exists and should be present, has it changed?
-            # determine args
-            args = gen_args(forwarders, forwardpolicy, skip_overlap_check)
-            if skip_overlap_check is not None:
-                del args['skip_overlap_check']
-
-            # set command
-            if not compare_args_ipa(ansible_module, args, existing_resource):
-                command = "dnsforwardzone_mod"
-            else:
+                # enabled or disabled?
+                is_enabled = "IGNORE"
+            elif existing_resource is not None and operation == "del":
+                # exists but should be absent
+                # set command
+                command = "dnsforwardzone_del"
+                # enabled or disabled?
+                is_enabled = "IGNORE"
+            elif forwarders is None:
+                # forwarders are not defined its not a delete, update state?
+                # set command
                 command = None
+                # enabled or disabled?
+                if existing_resource is not None:
+                    is_enabled = existing_resource["idnszoneactive"][0]
+                else:
+                    is_enabled = "IGNORE"
+            elif existing_resource is not None and operation == "update":
+                # exists and is updating
+                # calculate the new forwarders and mod
+                # determine args
+                if state != "absent":
+                    forwarders = list(set(existing_resource["idnsforwarders"]
+                                          + forwarders))
+                else:
+                    forwarders = list(set(existing_resource["idnsforwarders"])
+                                      - set(forwarders))
+                args = gen_args(forwarders, forwardpolicy,
+                                skip_overlap_check)
+                if skip_overlap_check is not None:
+                    del args['skip_overlap_check']
+
+                # command
+                if not compare_args_ipa(ansible_module, args, existing_resource):
+                    command = "dnsforwardzone_mod"
+                else:
+                    command = None
+
+                # enabled or disabled?
+                is_enabled = existing_resource["idnszoneactive"][0]
 
-            # enabled or disabled?
-            is_enabled = existing_resource["idnszoneactive"][0]
-
-        # if command is set then run it with the args
-        if command is not None:
-            api_command(ansible_module, command, name, args)
-            changed = True
+            elif existing_resource is None and operation == "add":
+                # does not exist but should be present
+                # determine args
+                args = gen_args(forwarders, forwardpolicy,
+                                skip_overlap_check)
+                # set command
+                command = "dnsforwardzone_add"
+                # enabled or disabled?
+                is_enabled = "TRUE"
+
+            elif existing_resource is not None and operation == "add":
+                # exists and should be present, has it changed?
+                # determine args
+                args = gen_args(forwarders, forwardpolicy, skip_overlap_check)
+                if skip_overlap_check is not None:
+                    del args['skip_overlap_check']
+
+                # set command
+                if not compare_args_ipa(ansible_module, args, existing_resource):
+                    command = "dnsforwardzone_mod"
+                else:
+                    command = None
+
+                # enabled or disabled?
+                is_enabled = existing_resource["idnszoneactive"][0]
 
-        # does the enabled state match what we want (if we care)
-        if is_enabled != "IGNORE":
-            if wants_enable and is_enabled != "TRUE":
-                api_command(ansible_module, "dnsforwardzone_enable",
-                            name, {})
-                changed = True
-            elif not wants_enable and is_enabled != "FALSE":
-                api_command(ansible_module, "dnsforwardzone_disable",
-                            name, {})
+            # if command is set then run it with the args
+            if command is not None:
+                api_command(ansible_module, command, name, args)
                 changed = True
 
+            # does the enabled state match what we want (if we care)
+            if is_enabled != "IGNORE":
+                if wants_enable and is_enabled != "TRUE":
+                    api_command(ansible_module, "dnsforwardzone_enable",
+                                name, {})
+                    changed = True
+                elif not wants_enable and is_enabled != "FALSE":
+                    api_command(ansible_module, "dnsforwardzone_disable",
+                                name, {})
+                    changed = True
+
     except Exception as e:
         ansible_module.fail_json(msg=str(e))