diff --git a/Doc/lib/libgrp.tex b/Doc/lib/libgrp.tex
index 8286081..473fc5e 100644
--- a/Doc/lib/libgrp.tex
+++ b/Doc/lib/libgrp.tex
@@ -9,10 +9,11 @@
 This module provides access to the \UNIX{} group database.
 It is available on all \UNIX{} versions.
 
-Group database entries are reported as 4-tuples containing the
-following items from the group database (see \code{<grp.h>}), in order:
+Group database entries are reported as a tuple-like object, whose
+attributes correspond to the members of the \code{group} structure
+(Attribute field below, see \code{<pwd.h>}):
 
-\begin{tableiii}{r|l|l}{textrm}{Index}{Field}{Meaning}
+\begin{tableiii}{r|l|l}{textrm}{Index}{Attribute}{Meaning}
   \lineiii{0}{gr_name}{the name of the group}
   \lineiii{1}{gr_passwd}{the (encrypted) group password; often empty}
   \lineiii{2}{gr_gid}{the numerical group ID}
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index a4b8ca3..daad574 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -2,17 +2,47 @@
 /* UNIX group file access module */
 
 #include "Python.h"
+#include "structseq.h"
 
 #include <sys/types.h>
 #include <grp.h>
 
+static PyStructSequence_Field struct_group_type_fields[] = {
+   {"gr_name", "group name"},
+   {"gr_passwd", "password"},
+   {"gr_gid", "group id"}, 
+   {"gr_mem", "group memebers"}, 
+   {0}
+};
+
+static char struct_group__doc__[] =
+"grp.struct_group: Results from getgr*() routines.\n\n\
+This object may be accessed either as a tuple of\n\
+  (gr_name,gr_passwd,gr_gid,gr_mem)\n\
+or via the object attributes as named in the above tuple.\n";
+
+static PyStructSequence_Desc struct_group_type_desc = {
+   "grp.struct_group",
+   struct_group__doc__,
+   struct_group_type_fields,
+   4,
+};
+
+
+static PyTypeObject StructGrpType;
 
 static PyObject *
 mkgrent(struct group *p)
 {
-    PyObject *v, *w;
+    int setIndex = 0;
+    PyObject *v = PyStructSequence_New(&StructGrpType), *w;
     char **member;
+
+    if (v == NULL)
+        return NULL;
+
     if ((w = PyList_New(0)) == NULL) {
+        Py_DECREF(v);
         return NULL;
     }
     for (member = p->gr_mem; *member != NULL; member++) {
@@ -20,16 +50,25 @@
         if (x == NULL || PyList_Append(w, x) != 0) {
             Py_XDECREF(x);
             Py_DECREF(w);
+            Py_DECREF(v);
             return NULL;
         }
         Py_DECREF(x);
     }
-    v = Py_BuildValue("(sslO)",
-                      p->gr_name,
-                      p->gr_passwd,
-                      (long)p->gr_gid,
-                      w);
-    Py_DECREF(w);
+
+#define SET(i,val) PyStructSequence_SET_ITEM(v, i, val)
+    SET(setIndex++, PyString_FromString(p->gr_name));
+    SET(setIndex++, PyString_FromString(p->gr_passwd));
+    SET(setIndex++, PyInt_FromLong((long) p->gr_gid));
+    SET(setIndex++, w);
+#undef SET
+
+    if (PyErr_Occurred()) {
+        Py_DECREF(v);
+        Py_DECREF(w);
+        return NULL;
+    }
+
     return v;
 }
 
@@ -120,5 +159,9 @@
 DL_EXPORT(void)
 initgrp(void)
 {
-    Py_InitModule3("grp", grp_methods, grp__doc__);
+    PyObject *m, *d;
+    m = Py_InitModule3("grp", grp_methods, grp__doc__);
+    d = PyModule_GetDict(m);
+    PyStructSequence_InitType(&StructGrpType, &struct_group_type_desc);
+    PyDict_SetItemString(d, "struct_group", (PyObject *) &StructGrpType);
 }
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index 47edd5a..35afc4e 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -2,10 +2,35 @@
 /* UNIX password file access module */
 
 #include "Python.h"
+#include "structseq.h"
 
 #include <sys/types.h>
 #include <pwd.h>
 
+static PyStructSequence_Field struct_pwd_type_fields[] = {
+	{"pw_name", "user name"},
+	{"pw_passwd", "password"},
+	{"pw_uid", "user id"},
+	{"pw_gid", "group id"}, 
+	{"pw_gecos", "real name"}, 
+	{"pw_dir", "home directory"},
+	{"pw_shell", "shell program"},
+	{0}
+};
+
+static char struct_passwd__doc__[] =
+"pwd.struct_passwd: Results from getpw*() routines.\n\n\
+This object may be accessed either as a tuple of\n\
+  (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
+or via the object attributes as named in the above tuple.\n";
+
+static PyStructSequence_Desc struct_pwd_type_desc = {
+	"pwd.struct_passwd",
+	struct_passwd__doc__,
+	struct_pwd_type_fields,
+	7,
+};
+
 static char pwd__doc__ [] = "\
 This module provides access to the Unix password database.\n\
 It is available on all Unix versions.\n\
@@ -17,22 +42,40 @@
 exception is raised if the entry asked for cannot be found.";
 
       
+static PyTypeObject StructPwdType;
+
 static PyObject *
 mkpwent(struct passwd *p)
 {
-	return Py_BuildValue(
-		"(ssllsss)",
-		p->pw_name,
-		p->pw_passwd,
-		(long)p->pw_uid,
-		(long)p->pw_gid,
-		p->pw_gecos,
-		p->pw_dir,
-		p->pw_shell);
+	int setIndex = 0;
+	PyObject *v = PyStructSequence_New(&StructPwdType);
+	if (v == NULL)
+		return NULL;
+
+#define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
+#define SETS(i,val) PyStructSequence_SET_ITEM(v, i, PyString_FromString(val))
+
+	SETS(setIndex++, p->pw_name);
+	SETS(setIndex++, p->pw_passwd);
+	SETI(setIndex++, p->pw_uid);
+	SETI(setIndex++, p->pw_gid);
+	SETS(setIndex++, p->pw_gecos);
+	SETS(setIndex++, p->pw_dir);
+	SETS(setIndex++, p->pw_shell);
+
+#undef SETS
+#undef SETI
+
+	if (PyErr_Occurred()) {
+		Py_XDECREF(v);
+		return NULL;
+	}
+
+	return v;
 }
 
 static char pwd_getpwuid__doc__[] = "\
-getpwuid(uid) -> entry\n\
+getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
 Return the password database entry for the given numeric user ID.\n\
 See pwd.__doc__ for more on password database entries.";
 
@@ -51,7 +94,7 @@
 }
 
 static char pwd_getpwnam__doc__[] = "\
-getpwnam(name) -> entry\n\
+getpwnam(name) -> (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
 Return the password database entry for the given user name.\n\
 See pwd.__doc__ for more on password database entries.";
 
@@ -112,6 +155,10 @@
 DL_EXPORT(void)
 initpwd(void)
 {
-	Py_InitModule4("pwd", pwd_methods, pwd__doc__,
+	PyObject *m, *d;
+	m = Py_InitModule4("pwd", pwd_methods, pwd__doc__,
                        (PyObject *)NULL, PYTHON_API_VERSION);
+	d = PyModule_GetDict(m);
+	PyStructSequence_InitType(&StructPwdType, &struct_pwd_type_desc);
+	PyDict_SetItemString(d, "struct_pwent", (PyObject *) &StructPwdType);
 }
