diff -ur adduser-3.110/adduser adduser-firstlastgid/adduser
--- adduser-3.110/adduser	2008-06-05 04:21:56.000000000 +1000
+++ adduser-firstlastgid/adduser	2010-04-25 20:49:11.000000000 +1000
@@ -80,9 +80,11 @@
 our $found_group_opt = undef;
 our $found_sys_opt = undef;
 our $ingroup_name = undef;
+our $new_firstgid = undef;
 our $new_firstuid = undef;
 our $new_gecos = undef;
 our $new_gid = undef;
+our $new_lastgid = undef;
 our $new_lastuid = undef;
 our $new_uid = undef;
 our $no_create_home = undef;
@@ -102,6 +104,8 @@
 my $shell = undef;
 my $first_uid = undef;
 my $last_uid = undef;
+my $first_gid = undef;
+my $last_gid = undef;
 my $dir_mode = undef;
 my $perm = undef;
 
@@ -124,6 +128,8 @@
 	    "firstuid=i" => \$new_firstuid,
 	    "lastuid=i" => \$new_lastuid,
 	    "gid=i" => \$new_gid,
+	    "firstgid=i" => \$new_firstgid,
+	    "lastgid=i" => \$new_lastgid,
 	    "conf=s" => \$configfile,
 	    "no-create-home" => \$no_create_home,
             "add_extra_groups" => \$add_extra_groups,
@@ -273,8 +279,10 @@
 	if (defined($new_gid) && defined(getgrgid($new_gid)));
 
     if (!defined($new_gid)) {
-        $new_gid = &first_avail_gid($config{"first_system_gid"},
-				   $config{"last_system_gid"});
+        $first_gid = $new_firstgid || $config{"first_gid"};
+        $last_gid = $new_lastgid || $config{"last_gid"};
+        $new_gid = &first_avail_gid($first_gid, $last_gid);
+
         if ($new_gid == -1) {
 	    print STDERR "$0: ";
 	    printf STDERR gtx("No GID is available in the range %d-%d (FIRST_SYS_GID - LAST_SYS_GID).\n"),$config{"first_system_gid"},$config{"last_system_gid"};
@@ -302,8 +310,9 @@
     dief (gtx("The GID `%s' is already in use.\n"),$new_gid)
 	if (defined($new_gid) && defined(getgrgid($new_gid)));
     if (!defined($new_gid)) {
-        $new_gid = &first_avail_gid($config{"first_gid"},
-				   $config{"last_gid"});
+        $first_gid = $new_firstgid || $config{"first_gid"};
+        $last_gid = $new_lastgid || $config{"last_gid"};
+        $new_gid = &first_avail_gid($first_gid, $last_gid);
 
         if ($new_gid == -1) {
 	    print STDERR "$0: ";
@@ -373,20 +382,26 @@
     check_user_group(1);
 
     if (!defined($new_uid) && $make_group_also) {
-	$new_uid = &first_avail_uid($config{"first_system_uid"},
-				   $config{"last_system_uid"});
+        $first_uid = $new_firstuid || $config{"first_system_uid"};
+        $last_uid = $new_lastuid || $config{"last_system_uid"};
+        $new_uid = &first_avail_uid($first_uid, $last_uid);
+
         if ($new_uid == -1) {
 	    print STDERR "$0: ";
 	    printf STDERR gtx("No UID/GID pair is available in the range %d-%d (FIRST_SYS_UID - LAST_SYS_UID).\n"),$config{"first_system_uid"},$config{"last_system_uid"};
             dief (gtx("The user `%s' was not created.\n"),$new_name);
         }
-        $new_gid = &first_avail_gid($config{"first_system_gid"},
-	                            $config{"last_system_gid"});
+        $first_gid = $new_firstgid || $config{"first_gid"};
+        $last_gid = $new_lastgid || $config{"last_gid"};
+        $new_gid = &first_avail_gid($first_gid, $last_gid);
+
 	$ingroup_name = $new_name;
     }
     elsif (!defined($new_uid) && !$make_group_also) {
-	$new_uid = &first_avail_uid($config{"first_system_uid"},
-				   $config{"last_system_uid"});
+        $first_uid = $new_firstuid || $config{"first_system_uid"};
+        $last_uid = $new_lastuid || $config{"last_system_uid"};
+	$new_uid = &first_avail_uid($first_uid, $last_uid);
+
         if ($new_uid == -1) {
 	    print STDERR "$0: ";
 	    printf STDERR gtx("No UID is available in the range %d-%d (FIRST_SYS_UID - LAST_SYS_UID).\n"),$config{"first_system_uid"},$config{"last_system_uid"};
@@ -472,8 +487,10 @@
             printf STDERR gtx("No UID/GID pair is available in the range %d-%d (FIRST_UID - LAST_UID).\n"),$first_uid,$last_uid;
 	    dief (gtx("The user `%s' was not created.\n"),$new_name);
         }
-	$new_gid = &first_avail_gid($config{"first_gid"}, 
-	                            $config{"last_gid"});
+        $first_gid = $new_firstgid || $config{"first_gid"};
+        $last_gid = $new_lastgid || $config{"last_gid"};
+        $new_gid = &first_avail_gid($first_gid, $last_gid);
+
 	$ingroup_name = $new_name;
     }
     elsif (!defined($new_uid) && !$make_group_also) {
@@ -991,19 +1008,20 @@
     printf gtx(
 "adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
 [--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
-[--disabled-password] [--disabled-login] USER
+[--firstgid ID] [--lastgid ID] [--disabled-password] [--disabled-login] USER
    Add a normal user
 
 adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
-[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
-[--disabled-login] USER
+[--firstuid ID] [--lastuid ID][--gecos GECOS]
+[--group | --ingroup GROUP | --gid ID] [--firstgid ID] [--lastgid ID]
+[--disabled-password] [--disabled-login] USER
    Add a system user
 
-adduser --group [--gid ID] GROUP
-addgroup [--gid ID] GROUP
+adduser --group [--gid ID] [--firstgid ID] [--lastgid ID] GROUP
+addgroup [--gid ID] [--firstgid ID] [--lastgid ID] GROUP
    Add a user group
 
-addgroup --system [--gid ID] GROUP
+addgroup --system [--gid ID] [--firstgid ID] [--lastgid ID] GROUP
    Add a system group
 
 adduser USER GROUP
diff -ur adduser-3.110/doc/adduser.8 adduser-firstlastgid/doc/adduser.8
--- adduser-3.110/doc/adduser.8	2008-07-03 16:59:57.000000000 +1000
+++ adduser-firstlastgid/doc/adduser.8	2010-04-25 20:49:22.000000000 +1000
@@ -10,13 +10,13 @@
 .SH NAME
 adduser, addgroup \- add a user or group to the system
 .SH SYNOPSIS
-.BR adduser " [options] [\-\-home DIR] [\-\-shell SHELL] [\-\-no-create-home] [\-\-uid ID] [\-\-firstuid ID] [\-\-lastuid ID] [\-\-ingroup GROUP | \-\-gid ID] [\-\-disabled-password] [\-\-disabled-login] [\-\-gecos GECOS] [\-\-add_extra_groups] user"
+.BR adduser " [options] [\-\-home DIR] [\-\-shell SHELL] [\-\-no-create-home] [\-\-uid ID] [\-\-firstuid ID] [\-\-lastuid ID] [\-\-ingroup GROUP | \-\-gid ID] [\-\-firstgid ID] [\-\-lastgid ID] [\-\-disabled-password] [\-\-disabled-login] [\-\-gecos GECOS] [\-\-add_extra_groups] user"
 .PP
-.BR adduser " \-\-system [options] [\-\-home DIR] [\-\-shell SHELL] [\-\-no-create-home] [\-\-uid ID] [\-\-group | \-\-ingroup GROUP | \-\-gid ID] [\-\-disabled-password] [\-\-disabled-login] [\-\-gecos GECOS] user"
+.BR adduser " \-\-system [options] [\-\-home DIR] [\-\-shell SHELL] [\-\-no-create-home] [\-\-uid ID] [\-\-firstuid ID] [\-\-lastuid ID] [\-\-group | \-\-ingroup GROUP | \-\-gid ID] [\-\-firstgid ID] [\-\-lastgid ID] [\-\-disabled-password] [\-\-disabled-login] [\-\-gecos GECOS] user"
 .PP
-.BR addgroup " [options] [\-\-gid ID] group"
+.BR addgroup " [options] [\-\-gid ID] [\-\-firstgid ID] [\-\-lastgid ID] group"
 .PP
-.BR addgroup " \-\-system [options] [\-\-gid ID] group"
+.BR addgroup " \-\-system [options] [\-\-gid ID] [\-\-firstgid ID] [\-\-lastgid ID] group"
 .PP
 .BR adduser " [options] user group"
 .SS COMMON OPTIONS
