diff --git a/conf/type/__group/explorer/gshadow b/conf/type/__group/explorer/gshadow
index 51d502a1..2c0c0e8c 100755
--- a/conf/type/__group/explorer/gshadow
+++ b/conf/type/__group/explorer/gshadow
@@ -22,6 +22,14 @@
 #
 
 name=$__object_id
+os="$($__explorer/os)"
 
-getent gshadow "$name" || true
+case "$os" in
+   centos|fedora|redhat)
+      grep "^${name}:" /etc/gshadow || true
+   ;;
+   *)
+      getent gshadow "$name" || true
+   ;;
+esac
 
diff --git a/conf/type/__group/gencode-remote b/conf/type/__group/gencode-remote
index cf26a437..9a283207 100755
--- a/conf/type/__group/gencode-remote
+++ b/conf/type/__group/gencode-remote
@@ -23,23 +23,36 @@
 #
 
 name="$__object_id"
+os="$(cat "$__global/explorer/os")"
 
 cd "$__object/parameter"
 if grep -q "^${name}:" "$__object/explorer/group"; then
    for property in $(ls .); do
       new_value="$(cat "$property")"
+      # argument to pass the groupmod command for this property (os-specific
+      # exceptions are listed in the case statement below)
+      proparg="--$property"
 
       case "$property" in
          password)
             current_value="$(awk -F: '{ print $2 }' < "$__object/explorer/gshadow")"
+            case "$os" in
+               centos|fedora|redhat)
+                  echo "group/$name: $os groupmod does not support password modification" >&2
+                  continue
+               ;;
+            esac
          ;;
          gid)
             current_value="$(awk -F: '{ print $3 }' < "$__object/explorer/group")"
+            case "$os" in
+               centos|fedora|redhat) proparg="-g" ;;
+            esac
          ;;
       esac
 
       if [ "$new_value" != "$current_value" ]; then
-         set -- "$@" "--$property" \"$new_value\"
+         set -- "$@" "$proparg" \"$new_value\"
       fi
    done