diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c
index 2ec43ff..d0736f7 100644
--- a/Modules/dbmmodule.c
+++ b/Modules/dbmmodule.c
@@ -60,7 +60,7 @@
 	if ( (dp->di_dbm = dbm_open(file, flags, mode)) == 0 ) {
 	    err_errno(DbmError);
 	    DECREF(dp);
-	    return 0;
+	    return NULL;
 	}
 	return (object *)dp;
 }
@@ -107,12 +107,12 @@
 	drec = dbm_fetch(dp->di_dbm, krec);
 	if ( drec.dptr == 0 ) {
 	    err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key));
-	    return 0;
+	    return NULL;
 	}
 	if ( dbm_error(dp->di_dbm) ) {
 	    dbm_clearerr(dp->di_dbm);
 	    err_setstr(DbmError, "");
-	    return 0;
+	    return NULL;
 	}
 	return newsizedstringobject(drec.dptr, drec.dsize);
 }
@@ -162,6 +162,21 @@
 };
 
 static object *
+dbm__close(dp, args)
+	register dbmobject *dp;
+	object *args;
+{
+	if ( !getnoarg(args) )
+		return NULL;
+        if ( dp->di_dbm )
+	    dbm_close(dp->di_dbm);
+	dp->di_dbm = NULL;
+	DEL(dp);
+	INCREF(None);
+	return None;
+}
+
+static object *
 dbm_keys(dp, args)
 	register dbmobject *dp;
 	object *args;
@@ -170,10 +185,6 @@
 	datum key;
 	int err;
 
-	if (dp == NULL || !is_dbmobject(dp)) {
-		err_badcall();
-		return NULL;
-	}
 	if (!getnoarg(args))
 		return NULL;
 	v = newlistobject(0);
@@ -196,7 +207,6 @@
 	return v;
 }
 
-
 static object *
 dbm_has_key(dp, args)
 	register dbmobject *dp;
@@ -211,6 +221,7 @@
 }
 
 static struct methodlist dbm_methods[] = {
+	{"close",	(method)dbm__close},
 	{"keys",	(method)dbm_keys},
 	{"has_key",	(method)dbm_has_key},
 	{NULL,		NULL}		/* sentinel */
@@ -227,7 +238,7 @@
 static typeobject Dbmtype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
-	"Dbm_dictionary",
+	"dbm",
 	sizeof(dbmobject),
 	0,
 	(destructor)dbm_dealloc, /*tp_dealloc*/
@@ -248,27 +259,33 @@
     object *self;
     object *args;
 {
-    char *name, *flags;
-    int iflags, mode;
+	char *name;
+	char *flags = "r";
+	int iflags;
+	int mode = 0666;
 
-        if ( !getargs(args, "(ssi)", &name, &flags, &mode) )
-	  return 0;
+        if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
+	  return NULL;
 	if ( strcmp(flags, "r") == 0 )
 	  iflags = O_RDONLY;
 	else if ( strcmp(flags, "w") == 0 )
-	  iflags = O_WRONLY|O_CREAT;
-	else if ( strcmp(flags, "rw") == 0 )
+	  iflags = O_RDWR;
+	else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */
+	  iflags = O_RDWR|O_CREAT; 
+	else if ( strcmp(flags, "c") == 0 )
 	  iflags = O_RDWR|O_CREAT;
+	else if ( strcmp(flags, "n") == 0 )
+	  iflags = O_RDWR|O_CREAT|O_TRUNC;
 	else {
 	    err_setstr(DbmError,
-		       "Flags should be one of 'r', 'w' or 'rw'");
-	    return 0;
+		       "Flags should be one of 'r', 'w', 'c' or 'n'");
+	    return NULL;
 	}
         return newdbmobject(name, iflags, mode);
 }
 
 static struct methodlist dbmmodule_methods[] = {
-    { "open", (method)dbmopen },
+    { "open", (method)dbmopen, 1 },
     { 0, 0 },
 };
 
@@ -282,5 +299,3 @@
     if ( DbmError == NULL || dictinsert(d, "error", DbmError) )
       fatal("can't define dbm.error");
 }
-
-	
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index 632846f..021531c 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -68,7 +68,7 @@
 	    else
 	        err_setstr(DbmError, (char *) gdbm_strerror(gdbm_errno));
 	    DECREF(dp);
-	    return 0;
+	    return NULL;
 	}
 	return (object *)dp;
 }
@@ -119,7 +119,7 @@
 	drec = gdbm_fetch(dp->di_dbm, krec);
 	if ( drec.dptr == 0 ) {
 	    err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key));
-	    return 0;
+	    return NULL;
 	}
 	v = newsizedstringobject(drec.dptr, drec.dsize);
 	free(drec.dptr);
@@ -168,6 +168,21 @@
 };
 
 static object *
+dbm_close(dp, args)
+	register dbmobject *dp;
+	object *args;
+{
+	if ( !getnoarg(args) )
+		return NULL;
+        if ( dp->di_dbm )
+		gdbm_close(dp->di_dbm);
+	dp->di_dbm = NULL;
+	DEL(dp);
+	INCREF(None);
+	return None;
+}
+
+static object *
 dbm_keys(dp, args)
 	register dbmobject *dp;
 	object *args;
@@ -271,6 +286,7 @@
 }
 
 static struct methodlist dbm_methods[] = {
+	{"close",	(method)dbm_close},
 	{"keys",	(method)dbm_keys},
 	{"has_key",	(method)dbm_has_key},
 	{"firstkey",	(method)dbm_firstkey},
@@ -290,7 +306,7 @@
 static typeobject Dbmtype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
-	"Gdbm_dictionary",
+	"gdbm",
 	sizeof(dbmobject),
 	0,
 	(destructor)dbm_dealloc, /*tp_dealloc*/
@@ -311,12 +327,14 @@
     object *self;
     object *args;
 {
-    char *name, *flags;
-    int iflags, mode;
+    char *name;
+    char *flags = "r";
+    int iflags;
+   int mode = 0666;
 
 /* XXXX add other flags */
-        if ( !getargs(args, "(ssi)", &name, &flags, &mode) )
-	  return 0;
+        if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
+	  return NULL;
 	if ( strcmp(flags, "r") == 0 )
 	  iflags = GDBM_READER;
 	else if ( strcmp(flags, "w") == 0 )
@@ -328,13 +346,13 @@
 	else {
 	    err_setstr(DbmError,
 		       "Flags should be one of 'r', 'w', 'c' or 'n'");
-	    return 0;
+	    return NULL;
 	}
         return newdbmobject(name, iflags, mode);
 }
 
 static struct methodlist dbmmodule_methods[] = {
-    { "open", (method)dbmopen },
+    { "open", (method)dbmopen, 1 },
     { 0, 0 },
 };
 
