diff --git a/mkapachepw.py b/mkapachepw.py
index 4e4a46a..e013e4e 100755
--- a/mkapachepw.py
+++ b/mkapachepw.py
@@ -6,7 +6,7 @@
 # Program Information
 
 PROGNAME = "mkapachepw"
-RCSID = "$Id: mkapachepw.py,v 1.100 2005/03/31 23:12:16 tundra Exp $"
+RCSID = "$Id: mkapachepw.py,v 1.101 2005/04/01 06:08:38 root Exp $"
 VERSION = RCSID.split()[2]
 
 # Copyright Information
@@ -22,6 +22,8 @@
 #            Variables User Might Change                   #
 #----------------------------------------------------------#
 
+STARTUID = 100     # User IDs below this ignored
+STARTGID = 100     # Group IDS below this ignored
 
 
 #------------------- Nothing Below Here Should Need Changing ------------------#
@@ -32,7 +34,9 @@
 #----------------------------------------------------------#
 
 import getopt
+import grp
 import os
+import pwd
 import sys
 import tconfpy
 
@@ -84,6 +88,7 @@
 
 uTable = [PROGNAME + " " + VERSION + " - %s\n" % COPYRIGHT,
           "usage:  " + PROGNAME + " [-fhv] where,\n",
+          "          -d       dump debug output",
           "          -f file  configuration file to use",
           "          -h       print this help information",
           "          -v       print detailed version information",
@@ -94,8 +99,8 @@
 #          Global Variables & Data Structures              #
 #----------------------------------------------------------#
 
-CFGFILE = os.path.join(os.getenv("HOME"), "." + PROGNAME)  # conf file
-
+CFGFILE = ""          # Default is no config file
+DEBUG   = False       # Request debug output
 
 #--------------------------- Code Begins Here ---------------------------------#
 
@@ -136,8 +141,10 @@
 #                    Program Entry Point                   #
 #----------------------------------------------------------#
 
+#####
 # Command line processing - Process any options set in the
 # environment first, and then those given on the command line
+#####
 
 OPTIONS = sys.argv[1:]
 envopt = os.getenv(PROGNAME.upper())
@@ -145,12 +152,14 @@
     OPTIONS = envopt.split() + OPTIONS
 
 try:
-    opts, args = getopt.getopt(OPTIONS, '-f:hv')
+    opts, args = getopt.getopt(OPTIONS, '-df:hv')
 except getopt.GetoptError:
     Usage()
     sys.exit(1)
 
 for opt, val in opts:
+    if opt == "-d":
+        DEBUG = True
     if opt == "-f":
         CFGFILE=val
     if opt == "-h":
@@ -160,17 +169,70 @@
         print RCSID
         sys.exit(0)
 
-# Process the configuration file
 
-retval = tconfpy.ParseConfig(CFGFILE)
+# Process the configuration file, if any
 
-# Print any errors or warning generated by the parse
+if CFGFILE:
 
-for x in (retval.Errors, retval.Warnings):
-    for y in x:
-        y = "%s %s %s" % (PROGNAME, VERSION, " ".join(y.split()[2:]))
-        print y
+    retval = tconfpy.ParseConfig(CFGFILE, CallingProgram="%s %s " % (PROGNAME, VERSION))
 
-# If there were any errors, we're done
-if retval.Errors:
-    sys.exit(0)
+    # Print any errors or warning generated by the parse
+
+    for x in (retval.ErrMsgs, retval.WarnMsgs):
+        for y in x:
+            print y
+
+    # If there were any errors, we're done
+    if retval.ErrMsgs:
+        sys.exit(0)
+
+
+#####
+# Build List Of Groups
+#####
+
+groups   = {}
+gid2name = {}
+
+for group in grp.getgrall():
+    gname, gpw, gid, gmembers = group[:4]
+    gid2name[gid] = gname
+    
+    groups[gname] = []
+    for member in gmembers:
+        groups[gname].append(member)
+
+#####
+# Build A List Of Users
+#####
+
+users    = {}
+
+for user in pwd.getpwall():
+
+    uname, pw, uid, gid = user[:4]
+    gname = gid2name[gid]
+    
+    users[uname] = pw
+
+    if uname not in groups[gname]:
+        groups[gname].append(uname)
+
+#####
+# Dump Results If Asked
+#####
+
+
+if DEBUG:
+    for x in users:
+        print x, users[x]
+    print
+
+
+    grlist = gid2name.keys()
+    grlist.sort()
+
+    for y in grlist:
+        x = gid2name[y]
+        print x, groups[x]
+    print