diff --git a/enrol/ldap/lang/en/enrol_ldap.php b/enrol/ldap/lang/en/enrol_ldap.php
index 70a3d3e..16f548e 100644
--- a/enrol/ldap/lang/en/enrol_ldap.php
+++ b/enrol/ldap/lang/en/enrol_ldap.php
@@ -80,6 +80,8 @@ $string['failed'] = "Failed!\n";
 $string['general_options'] = 'General options';
 $string['group_memberofattribute'] = 'Name of the attribute that specifies which groups a given user or group belongs to (e.g., memberOf, groupMembership, etc.)';
 $string['group_memberofattribute_key'] = '\'Member of\' attribute';
+$string['group_objectclass'] = 'Optional: Overrides objectClass of netsted groups. Usually group or groupOfNames';
+$string['group_objectclass_key'] = 'ObjectClass of groups';
 $string['host_url'] = 'Specify LDAP host in URL-form like \'ldap://ldap.myorg.com/\' or \'ldaps://ldap.myorg.com/\'';
 $string['host_url_key'] = 'Host URL';
 $string['idnumber_attribute'] = 'If the group membership contains distinguised names, specify the same attribute you have used for the user \'ID Number\' mapping in the LDAP authentication settings';
diff --git a/enrol/ldap/lib.php b/enrol/ldap/lib.php
index b4bf0b9..d5c22d2 100644
--- a/enrol/ldap/lib.php
+++ b/enrol/ldap/lib.php
@@ -453,9 +453,7 @@ class enrol_ldap_plugin extends enrol_plugin {
                             if ($this->config->nested_groups) {
                                 $users = array();
                                 foreach ($ldapmembers as $ldapmember) {
-                                    $grpusers = $this->ldap_explode_group($ldapmember,
-                                                                          $this->config->{'memberattribute_role'.$role->id});
-
+                                    $grpusers = $this->ldap_explode_group($ldapmember, $this->config->group_memberofattribute);
                                     $users = array_merge($users, $grpusers);
                                 }
                                 $ldapmembers = array_unique($users); // There might be duplicates.
@@ -889,6 +887,7 @@ class enrol_ldap_plugin extends enrol_plugin {
     protected function ldap_explode_group($group, $memberattribute) {
         switch ($this->get_config('user_type')) {
             case 'ad':
+            case 'rfc2307bis':
                 // $group is already the distinguished name to search.
                 $dn = $group;
 
@@ -896,7 +895,7 @@ class enrol_ldap_plugin extends enrol_plugin {
                 $entry = ldap_first_entry($this->ldapconnection, $result);
                 $objectclass = ldap_get_values($this->ldapconnection, $entry, 'objectClass');
 
-                if (!in_array('group', $objectclass)) {
+                if (!in_array($this->get_config('group_objectclass'), array_map('strtolower',  $objectclass))) {
                     // Not a group, so return immediately.
                     return array($group);
                 }
diff --git a/enrol/ldap/settings.php b/enrol/ldap/settings.php
index 8b3f329..32ba763 100644
--- a/enrol/ldap/settings.php
+++ b/enrol/ldap/settings.php
@@ -112,5 +112,6 @@ if ($ADMIN->fulltree) {
         $options = $yesno;
         $settings->add(new admin_setting_configselect('enrol_ldap/nested_groups', get_string('nested_groups_key', 'enrol_ldap'), get_string('nested_groups', 'enrol_ldap'), 0, $options));
         $settings->add(new admin_setting_configtext_trim_lower('enrol_ldap/group_memberofattribute', get_string('group_memberofattribute_key', 'enrol_ldap'), get_string('group_memberofattribute', 'enrol_ldap'), '', true, true));
+        $settings->add(new admin_setting_configtext_trim_lower('enrol_ldap/group_objectclass', get_string('group_objectclass_key', 'enrol_ldap'), get_string('group_objectclass', 'enrol_ldap'), '', true, true));
     }
 }
diff --git a/lib/ldaplib.php b/lib/ldaplib.php
index 0a941a0..f70cd9a 100644
--- a/lib/ldaplib.php
+++ b/lib/ldaplib.php
@@ -99,6 +99,14 @@ function ldap_getdefaults() {
                         'ad' => 'pwdlastset',
                         'default' => ''
                         );
+    $default['group_objectclass'] = array (
+                        'edir' => '',
+                        'rfc2307' => 'posixgroup',
+                        'rfc2307bis' => 'groupofnames',
+                        'samba' => 'posixgroup',
+                        'ad' => 'group',
+                        'default' => ''
+                        );
     return $default;
 }
 
