diff --git a/HSH/Helpers/UnixUsers.hs b/HSH/Helpers/UnixUsers.hs
--- a/HSH/Helpers/UnixUsers.hs
+++ b/HSH/Helpers/UnixUsers.hs
@@ -84,15 +84,19 @@
   return $ filter (p/=) all
 getSysGroupsAll u = return . words =<< (runSL $ render1 [("u",u)] "id -nG $u$")
 
-data AddUserToGroupArgs = AddUserToGroupArgs {addUserToGroupUser::String,addUserToGroupGroup::String}
 
+
 -- addUserToGroup fails if user/group doesn't exist
 -- if user is already in group, there's no error, which is the same behavior of the unix command.
-tAddUserToGroup = addUserToGroup $ AddUserToGroupArgs {addUserToGroupUser="thartman",addUserToGroupGroup="thartman"}
-addUserToGroup AddUserToGroupArgs {addUserToGroupUser=u,addUserToGroupGroup=g} 
+
+addUserToGroup = addUserToGroup' (Just "usermod")
+addUserToGroup' :: (Maybe FilePath) -> SysUser -> SysGroup -> IO ()
+addUserToGroup' mbUsermodCmd u g 
   | null . SU.strip $ u = fail "addUserToGroup: blank user"
   | null . SU.strip $ g = fail "addUserToGroup: blank group" 
-  | otherwise = runIO $ render1 [("u",u),("g",g)]
+  | otherwise =
+      let usermodCmd = maybe "usermod" id mbUsermodCmd
+      in runIO $ render1 [("u",u),("g",g)]
                                       "usermod -G $g$ -a $u$"
 
 rmUserFromSecondaryGroup :: SysUser -> SysGroup -> IO ()
diff --git a/HSHHelpers.cabal b/HSHHelpers.cabal
--- a/HSHHelpers.cabal
+++ b/HSHHelpers.cabal
@@ -1,5 +1,5 @@
 Name: HSHHelpers
-Version: 0.11
+Version: 0.12
 License: GPL
 License-file: gpl.txt
 Description: Convenience functions and instances for HSH. I will deprecate this package if its contents are integrated into HSH.
