diff --git a/plugins/module_utils/ansible_freeipa_module.py b/plugins/module_utils/ansible_freeipa_module.py
index 9c10135f4c86a842e098f23393a0adbbcbd27b97..9e3254a3cb50df626071e10039e9ef3b58ae02e2 100644
--- a/plugins/module_utils/ansible_freeipa_module.py
+++ b/plugins/module_utils/ansible_freeipa_module.py
@@ -52,6 +52,11 @@ import socket
 import base64
 import six
 
+try:
+    from collections.abc import Mapping  # noqa
+except ImportError:
+    from collections import Mapping  # noqa
+
 
 if six.PY3:
     unicode = str
@@ -351,19 +356,28 @@ def is_ipv6_addr(ipaddr):
     return True
 
 
-class AnsibleFreeIPAParams(dict):
+class AnsibleFreeIPAParams(Mapping):
     def __init__(self, ansible_module):
-        self.update(ansible_module.params)
+        self.mapping = ansible_module.params
         self.ansible_module = ansible_module
 
+    def __getitem__(self, key):
+        param = self.mapping[key]
+        if param is not None:
+            return _afm_convert(param)
+
+    def __iter__(self):
+        return iter(self.mapping)
+
+    def __len__(self):
+        return len(self.mapping)
+
     @property
     def names(self):
         return self.name
 
     def __getattr__(self, name):
-        param = self.get(name)
-        if param is not None:
-            return _afm_convert(param)
+        return self.get(name)
 
 
 class FreeIPABaseModule(AnsibleModule):