diff --git a/src/daemon.c b/src/daemon.c
index cd09e2c..f907f0d 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -72,6 +72,7 @@ static const char *default_excludes[] = {
         "nobody4",
         "noaccess",
         "postgres",
+        "pgsql",
         "pvm",
         "rpm",
         "nfsnobody",
@@ -286,7 +287,6 @@ entry_generator_wtmp (GHashTable *users,
                         return NULL;
                 }
 #else
-                utmpxname (PATH_WTMP);
                 setutxent ();
 #endif
                 *state = g_new (WTmpGeneratorState, 1);
@@ -423,7 +423,11 @@ entry_generator_fgetpwent (GHashTable *users,
 
         /* Every iteration */
         fp = *state;
+#ifdef HAVE_FGETPWENT
         pwent = fgetpwent (fp);
+#else
+	pwent = getpwent ();
+#endif
         if (pwent != NULL) {
                 return pwent;
         }
@@ -803,24 +807,6 @@ daemon_init (Daemon *daemon)
         }
         g_object_unref (file);
 
-#ifdef HAVE_UTMPX_H
-        file = g_file_new_for_path (PATH_WTMP);
-        daemon->priv->wtmp_monitor = g_file_monitor_file (file,
-                                                           G_FILE_MONITOR_NONE,
-                                                           NULL,
-                                                           &error);
-        if (daemon->priv->wtmp_monitor != NULL) {
-                g_signal_connect (daemon->priv->wtmp_monitor,
-                                  "changed",
-                                  G_CALLBACK (on_users_monitor_changed),
-                                  daemon);
-        } else {
-                g_warning ("Unable to monitor %s: %s", PATH_WTMP, error->message);
-                g_error_free (error);
-        }
-        g_object_unref (file);
-#endif
-
         file = g_file_new_for_path (PATH_GDM_CUSTOM);
         daemon->priv->gdm_monitor = g_file_monitor_file (file,
                                                          G_FILE_MONITOR_NONE,
@@ -1410,16 +1396,15 @@ daemon_delete_user_authorized_cb (Daemon                *daemon,
         g_remove (filename);
         g_free (filename);
 
-        argv[0] = "/usr/sbin/userdel";
+        argv[0] = "/usr/sbin/pw";
         if (ud->remove_files) {
-                argv[1] = "-f";
-                argv[2] = "-r";
-                argv[3] = "--";
-                argv[4] = pwent->pw_name;
-                argv[5] = NULL;
+                argv[1] = "userdel";
+                argv[2] = pwent->pw_name;
+                argv[3] = "-r";
+                argv[4] = NULL;
         }
         else {
-                argv[1] = "--";
+                argv[1] = "userdel";
                 argv[2] = pwent->pw_name;
                 argv[3] = NULL;
         }
diff --git a/src/user.c b/src/user.c
index 6492a62..16d97dc 100644
--- a/src/user.c
+++ b/src/user.c
@@ -872,11 +872,11 @@ user_change_real_name_authorized_cb (Daemon                *daemon,
                          "change real name of user '%s' (%d) to '%s'",
                          user->user_name, user->uid, name);
 
-                argv[0] = "/usr/sbin/usermod";
-                argv[1] = "-c";
-                argv[2] = name;
-                argv[3] = "--";
-                argv[4] = user->user_name;
+                argv[0] = "/usr/sbin/pw";
+                argv[1] = "usermod";
+                argv[2] = user->user_name;
+                argv[3] = "-c";
+                argv[4] = name;
                 argv[5] = NULL;
 
                 error = NULL;
@@ -946,11 +946,11 @@ user_change_user_name_authorized_cb (Daemon                *daemon,
                          "change name of user '%s' (%d) to '%s'",
                          old_name, user->uid, name);
 
-                argv[0] = "/usr/sbin/usermod";
-                argv[1] = "-l";
-                argv[2] = name;
-                argv[3] = "--";
-                argv[4] = user->user_name;
+                argv[0] = "/usr/sbin/pw";
+                argv[1] = "usermod";
+                argv[2] = user->user_name;
+                argv[3] = "-n";
+                argv[4] = name;
                 argv[5] = NULL;
 
                 error = NULL;
@@ -1290,11 +1290,11 @@ user_change_shell_authorized_cb (Daemon                *daemon,
                          "change shell of user '%s' (%d) to '%s'",
                          user->user_name, user->uid, shell);
 
-                argv[0] = "/usr/sbin/usermod";
-                argv[1] = "-s";
-                argv[2] = shell;
-                argv[3] = "--";
-                argv[4] = user->user_name;
+                argv[0] = "/usr/sbin/pw";
+                argv[1] = "usermod";
+                argv[2] = user->user_name;
+                argv[3] = "-s";
+                argv[4] = shell;
                 argv[5] = NULL;
 
                 error = NULL;
@@ -1550,11 +1550,10 @@ user_change_locked_authorized_cb (Daemon                *daemon,
                 sys_log (context,
                          "%s account of user '%s' (%d)",
                          locked ? "locking" : "unlocking", user->user_name, user->uid);
-                argv[0] = "/usr/sbin/usermod";
-                argv[1] = locked ? "-L" : "-U";
-                argv[2] = "--";
-                argv[3] = user->user_name;
-                argv[4] = NULL;
+                argv[0] = "/usr/sbin/pw";
+                argv[1] = locked ? "lock" : "unlock";
+                argv[2] = user->user_name;
+                argv[3] = NULL;
 
                 error = NULL;
                 if (!spawn_with_login_uid (context, argv, &error)) {
@@ -1663,11 +1662,11 @@ user_change_account_type_authorized_cb (Daemon                *daemon,
 
                 g_free (groups);
 
-                argv[0] = "/usr/sbin/usermod";
-                argv[1] = "-G";
-                argv[2] = str->str;
-                argv[3] = "--";
-                argv[4] = user->user_name;
+                argv[0] = "/usr/sbin/pw";
+                argv[1] = "usermod";
+                argv[2] = user->user_name;
+                argv[3] = "-G";
+                argv[4] = str->str;
                 argv[5] = NULL;
 
                 g_string_free (str, FALSE);
@@ -1734,10 +1733,8 @@ user_change_password_mode_authorized_cb (Daemon                *daemon,
                     mode == PASSWORD_MODE_NONE) {
 
                         argv[0] = "/usr/bin/passwd";
-                        argv[1] = "-d";
-                        argv[2] = "--";
-                        argv[3] = user->user_name;
-                        argv[4] = NULL;
+                        argv[1] = user->user_name;
+                        argv[2] = NULL;
 
                         error = NULL;
                         if (!spawn_with_login_uid (context, argv, &error)) {
@@ -1747,12 +1744,11 @@ user_change_password_mode_authorized_cb (Daemon                *daemon,
                         }
 
                         if (mode == PASSWORD_MODE_SET_AT_LOGIN) {
-                                argv[0] = "/usr/bin/chage";
-                                argv[1] = "-d";
+                                argv[0] = "/usr/bin/chpass";
+                                argv[1] = "-e";
                                 argv[2] = "0";
-                                argv[3] = "--";
-                                argv[4] = user->user_name;
-                                argv[5] = NULL;
+                                argv[3] = user->user_name;
+                                argv[4] = NULL;
 
                                 error = NULL;
                                 if (!spawn_with_login_uid (context, argv, &error)) {
@@ -1776,11 +1772,10 @@ user_change_password_mode_authorized_cb (Daemon                *daemon,
                         }
                 }
                 else if (user->locked) {
-                        argv[0] = "/usr/sbin/usermod";
-                        argv[1] = "-U";
-                        argv[2] = "--";
-                        argv[3] = user->user_name;
-                        argv[4] = NULL;
+                        argv[0] = "/usr/sbin/pw";
+                        argv[1] = "unlock";
+                        argv[2] = user->user_name;
+                        argv[3] = NULL;
 
                         error = NULL;
                         if (!spawn_with_login_uid (context, argv, &error)) {
@@ -1851,12 +1846,11 @@ user_change_password_authorized_cb (Daemon                *daemon,
 
         g_object_freeze_notify (G_OBJECT (user));
 
-        argv[0] = "/usr/sbin/usermod";
+        argv[0] = "/usr/bin/chpass";
         argv[1] = "-p";
         argv[2] = strings[0];
-        argv[3] = "--";
-        argv[4] = user->user_name;
-        argv[5] = NULL;
+        argv[3] = user->user_name;
+        argv[4] = NULL;
 
         error = NULL;
         if (!spawn_with_login_uid (context, argv, &error)) {
