diff --git a/plugins/modules/ipahost.py b/plugins/modules/ipahost.py
index 7a981f16d8746a5b755900d2101d69bf312460df..1fe11dc56a8d93dea917e8dd2b7c4a3a86d4c8a7 100644
--- a/plugins/modules/ipahost.py
+++ b/plugins/modules/ipahost.py
@@ -799,10 +799,15 @@ def main():
         server_realm = api_get_realm()
 
         commands = []
+        host_set = set()
 
         for host in names:
             if isinstance(host, dict):
                 name = host.get("name")
+                if name in host_set:
+                    ansible_module.fail_json(
+                        msg="host '%s' is used more than once" % name)
+                host_set.add(name)
                 description = host.get("description")
                 locality = host.get("locality")
                 location = host.get("location")
@@ -1337,6 +1342,8 @@ def main():
             else:
                 ansible_module.fail_json(msg="Unkown state '%s'" % state)
 
+        del host_set
+
         # Execute commands
 
         errors = []
diff --git a/plugins/modules/ipauser.py b/plugins/modules/ipauser.py
index b8152ee4df81924c9ddc9d98c0d0d76a26292da4..03713a419ba71f010ec472767cf9c1d9a117766a 100644
--- a/plugins/modules/ipauser.py
+++ b/plugins/modules/ipauser.py
@@ -958,10 +958,15 @@ def main():
         # commands
 
         commands = []
+        user_set = set()
 
         for user in names:
             if isinstance(user, dict):
                 name = user.get("name")
+                if name in user_set:
+                    ansible_module.fail_json(
+                        msg="user '%s' is used more than once" % name)
+                user_set.add(name)
                 # present
                 first = user.get("first")
                 last = user.get("last")
@@ -1370,6 +1375,8 @@ def main():
             else:
                 ansible_module.fail_json(msg="Unkown state '%s'" % state)
 
+        del user_set
+
         # Execute commands
 
         errors = []
diff --git a/tests/host/test_hosts.yml b/tests/host/test_hosts.yml
index 30fd6538f80af9beea6e9f3acb1cac54f623c8af..f82cc612ecebf3644ed88063b2995559b7104802 100644
--- a/tests/host/test_hosts.yml
+++ b/tests/host/test_hosts.yml
@@ -96,3 +96,18 @@
       state: absent
     register: result
     failed_when: result.changed
+
+  - name: Duplicate names in hosts failure test
+    ipahost:
+      ipaadmin_password: SomeADMINpassword
+      hosts:
+      - name: "{{ host1_fqdn }}"
+        force: yes
+      - name: "{{ host2_fqdn }}"
+        force: yes
+      - name: "{{ host3_fqdn }}"
+        force: yes
+      - name: "{{ host3_fqdn }}"
+        force: yes
+    register: result
+    failed_when: result.changed or "is used more than once" not in result.msg
diff --git a/tests/user/test_users.yml b/tests/user/test_users.yml
index 5b5d4538592d79cee01fb1ae41e745ab2f0197a7..81c7b608826b1aea6af6b1e8e3ef256cdb422f98 100644
--- a/tests/user/test_users.yml
+++ b/tests/user/test_users.yml
@@ -85,6 +85,25 @@
     register: result
     failed_when: result.changed
 
+  - name: Duplicate names in users failure test
+    ipauser:
+      ipaadmin_password: SomeADMINpassword
+      users:
+      - name: user1
+        givenname: user1
+        last: Last
+      - name: user2
+        first: user2
+        last: Last
+      - name: user3
+        first: user3
+        last: Last
+      - name: user3
+        first: user3
+        last: Last
+    register: result
+    failed_when: result.changed or "is used more than once" not in result.msg
+
   - name: Remove test users
     ipauser:
       ipaadmin_password: SomeADMINpassword