diff --git a/Objects/classobject.c b/Objects/classobject.c
index 7d8a8e9..376f031 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -247,7 +247,6 @@
 	
 	pos = 0;
 	while (mappinggetnext(class->cl_dict, &pos, &key, &value)) {
-		object *v;
 		if (!is_accessobject(value))
 			continue;
 		if (hasaccessvalue(value))
@@ -274,7 +273,6 @@
 	object *arg;
 {
 	register instanceobject *inst;
-	object *v;
 	object *init;
 	if (!is_classobject(class)) {
 		err_badcall();
@@ -328,12 +326,12 @@
 instance_dealloc(inst)
 	register instanceobject *inst;
 {
-	object *error_type, *error_value;
+	object *error_type, *error_value, *error_traceback;
 	object *del;
 	/* Call the __del__ method if it exists.  First temporarily
 	   revive the object and save the current exception, if any. */
 	INCREF(inst);
-	err_get(&error_type, &error_value);
+	err_fetch(&error_type, &error_value, &error_traceback);
 	if ((del = instance_getattr1(inst, "__del__")) != NULL) {
 		object *args = newtupleobject(0);
 		object *res = args;
@@ -345,7 +343,7 @@
 		/* XXX If __del__ raised an exception, it is ignored! */
 	}
 	/* Restore the saved exception and undo the temporary revival */
-	err_setval(error_type, error_value);
+	err_restore(error_type, error_value, error_traceback);
 	/* Can't use DECREF here, it would cause a recursive call */
 	if (--inst->ob_refcnt > 0)
 		return; /* __del__ added a reference; don't delete now */
@@ -427,6 +425,7 @@
 			}
 		}
 #endif
+		err_clear();
 		args = mkvalue("(Os)", inst, name);
 		if (args == NULL)
 			return NULL;
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index e40ac8d..89fd314 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -46,9 +46,9 @@
 	3, 7, 13, 31, 61, 127, 251, 509, 1021, 2017, 4093,
 	5987,
 	9551, 15683, 19609, 31397,
-        65521L, 131071L, 262139L, 524287L, 1048573L, 2097143L,
-        4194301L, 8388593L, 16777213L, 33554393L, 67108859L,
-        134217689L, 268435399L, 536870909L, 1073741789L,
+	65521L, 131071L, 262139L, 524287L, 1048573L, 2097143L,
+	4194301L, 8388593L, 16777213L, 33554393L, 67108859L,
+	134217689L, 268435399L, 536870909L, 1073741789L,
 	0
 };
 
@@ -95,12 +95,8 @@
 	mp = NEWOBJ(mappingobject, &Mappingtype);
 	if (mp == NULL)
 		return NULL;
-	mp->ma_size = primes[0];
-	mp->ma_table = (mappingentry *) calloc(sizeof(mappingentry), mp->ma_size);
-	if (mp->ma_table == NULL) {
-		DEL(mp);
-		return err_nomem();
-	}
+	mp->ma_size = 0;
+	mp->ma_table = NULL;
 	mp->ma_fill = 0;
 	mp->ma_used = 0;
 	return (object *)mp;
@@ -173,10 +169,13 @@
 	long hash;
 	object *value;
 {
+	object *old_value;
 	register mappingentry *ep;
 	ep = lookmapping(mp, key, hash);
 	if (ep->me_value != NULL) {
-		DECREF(ep->me_value);
+		old_value = ep->me_value;
+		ep->me_value = value;
+		DECREF(old_value); /* which **CAN** re-enter */
 		DECREF(key);
 	}
 	else {
@@ -186,9 +185,9 @@
 			DECREF(ep->me_key);
 		ep->me_key = key;
 		ep->me_hash = hash;
+		ep->me_value = value;
 		mp->ma_used++;
 	}
-	ep->me_value = value;
 }
 
 /*
@@ -233,14 +232,19 @@
 	mp->ma_table = newtable;
 	mp->ma_fill = 0;
 	mp->ma_used = 0;
+
+	/* Make two passes, so we can avoid decrefs
+	   (and possible side effects) till the table is copied */
 	for (i = 0, ep = oldtable; i < oldsize; i++, ep++) {
 		if (ep->me_value != NULL)
 			insertmapping(mp,ep->me_key,ep->me_hash,ep->me_value);
-		else {
-			XDECREF(ep->me_key);
-		}
 	}
-	DEL(oldtable);
+	for (i = 0, ep = oldtable; i < oldsize; i++, ep++) {
+		if (ep->me_value == NULL)
+			XDECREF(ep->me_key);
+	}
+
+	XDEL(oldtable);
 	return 0;
 }
 
@@ -254,6 +258,8 @@
 		err_badcall();
 		return NULL;
 	}
+	if (((mappingobject *)op)->ma_table == NULL)
+		return NULL;
 #ifdef CACHE_HASH
 	if (!is_stringobject(key) || (hash = ((stringobject *) key)->ob_shash) == -1)
 #endif
@@ -303,6 +309,8 @@
 	register mappingobject *mp;
 	register long hash;
 	register mappingentry *ep;
+	object *old_value, *old_key;
+
 	if (!is_mappingobject(op)) {
 		err_badcall();
 		return -1;
@@ -319,12 +327,14 @@
 		err_setval(KeyError, key);
 		return -1;
 	}
-	DECREF(ep->me_key);
+	old_key = ep->me_key;
 	INCREF(dummy);
 	ep->me_key = dummy;
-	DECREF(ep->me_value);
+	old_value = ep->me_value;
 	ep->me_value = NULL;
 	mp->ma_used--;
+	DECREF(old_value); 
+	DECREF(old_key); 
 	return 0;
 }
 
@@ -332,18 +342,23 @@
 mappingclear(op)
 	object *op;
 {
-	int i;
-	register mappingobject *mp;
+	int i, n;
+	register mappingentry *table;
+	mappingobject *mp;
 	if (!is_mappingobject(op))
 		return;
 	mp = (mappingobject *)op;
-	for (i = 0; i < mp->ma_size; i++) {
-		XDECREF(mp->ma_table[i].me_key);
-		XDECREF(mp->ma_table[i].me_value);
-		mp->ma_table[i].me_key = NULL;
-		mp->ma_table[i].me_value = NULL;
+	table = mp->ma_table;
+	if (table == NULL)
+		return;
+	n = mp->ma_size;
+	mp->ma_size = mp->ma_used = mp->ma_fill = 0;
+	mp->ma_table = NULL;
+	for (i = 0; i < n; i++) {
+		XDECREF(table[i].me_key);
+		XDECREF(table[i].me_value);
 	}
-	mp->ma_used = 0;
+	DEL(table);
 }
 
 int
@@ -387,8 +402,7 @@
 		if (ep->me_value != NULL)
 			DECREF(ep->me_value);
 	}
-	if (mp->ma_table != NULL)
-		DEL(mp->ma_table);
+	XDEL(mp->ma_table);
 	DEL(mp);
 }
 
@@ -460,6 +474,10 @@
 {
 	object *v;
 	long hash;
+	if (mp->ma_table == NULL) {
+		err_setval(KeyError, key);
+		return NULL;
+	}
 #ifdef CACHE_HASH
 	if (!is_stringobject(key) || (hash = ((stringobject *) key)->ob_shash) == -1)
 #endif
@@ -700,7 +718,7 @@
 	hash = hashobject(key);
 	if (hash == -1)
 		return NULL;
-	ok = lookmapping(mp, key, hash)->me_value != NULL;
+	ok = mp->ma_size != 0 && lookmapping(mp, key, hash)->me_value != NULL;
 	return newintobject(ok);
 }
 
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index eb8f4aa..44bc51b 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -94,7 +94,7 @@
 	f = (fileobject *) newopenfileobject((FILE *)NULL, name, mode, fclose);
 	if (f == NULL)
 		return NULL;
-#ifdef USE_FOPENRF
+#ifdef HAVE_FOPENRF
 	if (*mode == '*') {
 		FILE *fopenRF();
 		f->f_fp = fopenRF(name, mode+1);
@@ -231,6 +231,51 @@
 	return None;
 }
 
+#ifdef HAVE_FTRUNCATE
+static object *
+file_truncate(f, args)
+	fileobject *f;
+	object *args;
+{
+	long newsize;
+	int ret;
+	
+	if (f->f_fp == NULL)
+		return err_closed();
+	if (!getargs(args, "l", &newsize)) {
+		err_clear();
+		if (!getnoarg(args))
+		        return NULL;
+		BGN_SAVE
+		errno = 0;
+		newsize =  ftell(f->f_fp); /* default to current position*/
+		END_SAVE
+		if (newsize == -1L) {
+		        err_errno(IOError);
+			clearerr(f->f_fp);
+			return NULL;
+		}
+	}
+	BGN_SAVE
+	errno = 0;
+	ret = fflush(f->f_fp);
+	END_SAVE
+	if (ret == 0) {
+	        BGN_SAVE
+		errno = 0;
+		ret = ftruncate(fileno(f->f_fp), newsize);
+		END_SAVE
+	}
+	if (ret != 0) {
+		err_errno(IOError);
+		clearerr(f->f_fp);
+		return NULL;
+	}
+	INCREF(None);
+	return None;
+}
+#endif /* HAVE_FTRUNCATE */
+
 static object *
 file_tell(f, args)
 	fileobject *f;
@@ -615,6 +660,9 @@
 	{"readline",	(method)file_readline},
 	{"readlines",	(method)file_readlines},
 	{"seek",	(method)file_seek},
+#ifdef HAVE_FTRUNCATE
+	{"truncate",	(method)file_truncate},
+#endif
 	{"tell",	(method)file_tell},
 	{"write",	(method)file_write},
 	{"writelines",	(method)file_writelines},
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index b37dd15..3f8e6aa 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -285,7 +285,6 @@
 {
 	double vx, wx;
 	double div, mod;
-	object *t;
 	wx = w->ob_fval;
 	if (wx == 0.0) {
 		err_setstr(ZeroDivisionError, "float divmod()");
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index a22193f..4d94369 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -39,7 +39,9 @@
 	{"f_globals",	T_OBJECT,	OFF(f_globals),	RO},
 	{"f_locals",	T_OBJECT,	OFF(f_locals),	RO},
 	{"f_owner",	T_OBJECT,	OFF(f_owner),	RO},
-/*	{"f_fastlocals",T_OBJECT,	OFF(f_fastlocals),RO}, /* XXX Unsafe */
+#if 0
+	{"f_fastlocals",T_OBJECT,	OFF(f_fastlocals),RO}, /* XXX Unsafe */
+#endif
 	{"f_localmap",	T_OBJECT,	OFF(f_localmap),RO},
 	{"f_lasti",	T_INT,		OFF(f_lasti),	RO},
 	{"f_lineno",	T_INT,		OFF(f_lineno),	RO},
@@ -217,10 +219,8 @@
 	int level;
 {
 	block *b;
-	if (f->f_iblock >= f->f_nblocks) {
-		fprintf(stderr, "XXX block stack overflow\n");
-		abort();
-	}
+	if (f->f_iblock >= f->f_nblocks)
+		fatal("XXX block stack overflow");
 	b = &f->f_blockstack[f->f_iblock++];
 	b->b_type = type;
 	b->b_level = level;
@@ -232,10 +232,8 @@
 	frameobject *f;
 {
 	block *b;
-	if (f->f_iblock <= 0) {
-		fprintf(stderr, "XXX block stack underflow\n");
-		abort();
-	}
+	if (f->f_iblock <= 0)
+		fatal("XXX block stack underflow");
 	b = &f->f_blockstack[--f->f_iblock];
 	return b;
 }
@@ -248,7 +246,7 @@
 {
 	/* Merge f->f_fastlocals into f->f_locals */
 	object *locals, *fast, *map;
-	object *error_type, *error_value;
+	object *error_type, *error_value, *error_traceback;
 	int j;
 	if (f == NULL)
 		return;
@@ -260,7 +258,7 @@
 	if (!is_dictobject(locals) || !is_listobject(fast) ||
 	    !is_tupleobject(map))
 		return;
-	err_get(&error_type, &error_value);
+	err_fetch(&error_type, &error_value, &error_traceback);
 	for (j = gettuplesize(map); --j >= 0; ) {
 		object *key = gettupleitem(map, j);
 		object *value = getlistitem(fast, j);
@@ -274,7 +272,7 @@
 				err_clear();
 		}
 	}
-	err_setval(error_type, error_value);
+	err_restore(error_type, error_value, error_traceback);
 }
 
 void
@@ -284,7 +282,7 @@
 {
 	/* Merge f->f_locals into f->f_fastlocals */
 	object *locals, *fast, *map;
-	object *error_type, *error_value;
+	object *error_type, *error_value, *error_traceback;
 	int j;
 	if (f == NULL)
 		return;
@@ -296,7 +294,7 @@
 	if (!is_dictobject(locals) || !is_listobject(fast) ||
 	    !is_tupleobject(map))
 		return;
-	err_get(&error_type, &error_value);
+	err_fetch(&error_type, &error_value, &error_traceback);
 	for (j = gettuplesize(map); --j >= 0; ) {
 		object *key = gettupleitem(map, j);
 		object *value = dict2lookup(locals, key);
@@ -308,5 +306,5 @@
 			if (setlistitem(fast, j, value) != 0)
 				err_clear();
 	}
-	err_setval(error_type, error_value);
+	err_restore(error_type, error_value, error_traceback);
 }
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 7a4708e..6b41ae1 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -456,7 +456,6 @@
 	intobject *x;
 	intobject *y;
 {
-	object *v, *v0, *v1;
 	long d, m;
 	if (i_divmod(x, y, &d, &m) < 0)
 		return NULL;
diff --git a/Objects/listobject.c b/Objects/listobject.c
index a3e4cb9..521d1a8 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -404,7 +404,7 @@
 	d = n - (ihigh-ilow);
 	if (d <= 0) { /* Delete -d items; XDECREF ihigh-ilow items */
 		for (k = ilow; k < ihigh; k++)
-			XDECREF(item[k]);
+			XDECREF(item[k]);  /* bug: reentrant side effects */
 		if (d < 0) {
 			for (/*k = ihigh*/; k < a->ob_size; k++)
 				item[k+d] = item[k];
@@ -422,7 +422,7 @@
 		for (k = a->ob_size; --k >= ihigh; )
 			item[k+d] = item[k];
 		for (/*k = ihigh-1*/; k >= ilow; --k)
-			XDECREF(item[k]);
+			XDECREF(item[k]); /* bug: side effects :-( */
 		a->ob_item = item;
 		a->ob_size += d;
 	}
@@ -454,6 +454,7 @@
 	int i;
 	object *v;
 {
+	object *old_value;
 	if (i < 0 || i >= a->ob_size) {
 		err_setstr(IndexError, "list assignment index out of range");
 		return -1;
@@ -461,8 +462,9 @@
 	if (v == NULL)
 		return list_ass_slice(a, i, i+1, v);
 	INCREF(v);
-	DECREF(a->ob_item[i]);
+	old_value = a->ob_item[i];
 	a->ob_item[i] = v;
+	DECREF(old_value); 
 	return 0;
 }
 
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 82a74c0..6561edc 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -570,7 +570,6 @@
 
 /* Forward */
 static void long_dealloc PROTO((object *));
-static int long_print PROTO((object *, FILE *, int));
 static object *long_repr PROTO((object *));
 static int long_compare PROTO((longobject *, longobject *));
 static long long_hash PROTO((longobject *));
diff --git a/Objects/mappingobject.c b/Objects/mappingobject.c
index e40ac8d..89fd314 100644
--- a/Objects/mappingobject.c
+++ b/Objects/mappingobject.c
@@ -46,9 +46,9 @@
 	3, 7, 13, 31, 61, 127, 251, 509, 1021, 2017, 4093,
 	5987,
 	9551, 15683, 19609, 31397,
-        65521L, 131071L, 262139L, 524287L, 1048573L, 2097143L,
-        4194301L, 8388593L, 16777213L, 33554393L, 67108859L,
-        134217689L, 268435399L, 536870909L, 1073741789L,
+	65521L, 131071L, 262139L, 524287L, 1048573L, 2097143L,
+	4194301L, 8388593L, 16777213L, 33554393L, 67108859L,
+	134217689L, 268435399L, 536870909L, 1073741789L,
 	0
 };
 
@@ -95,12 +95,8 @@
 	mp = NEWOBJ(mappingobject, &Mappingtype);
 	if (mp == NULL)
 		return NULL;
-	mp->ma_size = primes[0];
-	mp->ma_table = (mappingentry *) calloc(sizeof(mappingentry), mp->ma_size);
-	if (mp->ma_table == NULL) {
-		DEL(mp);
-		return err_nomem();
-	}
+	mp->ma_size = 0;
+	mp->ma_table = NULL;
 	mp->ma_fill = 0;
 	mp->ma_used = 0;
 	return (object *)mp;
@@ -173,10 +169,13 @@
 	long hash;
 	object *value;
 {
+	object *old_value;
 	register mappingentry *ep;
 	ep = lookmapping(mp, key, hash);
 	if (ep->me_value != NULL) {
-		DECREF(ep->me_value);
+		old_value = ep->me_value;
+		ep->me_value = value;
+		DECREF(old_value); /* which **CAN** re-enter */
 		DECREF(key);
 	}
 	else {
@@ -186,9 +185,9 @@
 			DECREF(ep->me_key);
 		ep->me_key = key;
 		ep->me_hash = hash;
+		ep->me_value = value;
 		mp->ma_used++;
 	}
-	ep->me_value = value;
 }
 
 /*
@@ -233,14 +232,19 @@
 	mp->ma_table = newtable;
 	mp->ma_fill = 0;
 	mp->ma_used = 0;
+
+	/* Make two passes, so we can avoid decrefs
+	   (and possible side effects) till the table is copied */
 	for (i = 0, ep = oldtable; i < oldsize; i++, ep++) {
 		if (ep->me_value != NULL)
 			insertmapping(mp,ep->me_key,ep->me_hash,ep->me_value);
-		else {
-			XDECREF(ep->me_key);
-		}
 	}
-	DEL(oldtable);
+	for (i = 0, ep = oldtable; i < oldsize; i++, ep++) {
+		if (ep->me_value == NULL)
+			XDECREF(ep->me_key);
+	}
+
+	XDEL(oldtable);
 	return 0;
 }
 
@@ -254,6 +258,8 @@
 		err_badcall();
 		return NULL;
 	}
+	if (((mappingobject *)op)->ma_table == NULL)
+		return NULL;
 #ifdef CACHE_HASH
 	if (!is_stringobject(key) || (hash = ((stringobject *) key)->ob_shash) == -1)
 #endif
@@ -303,6 +309,8 @@
 	register mappingobject *mp;
 	register long hash;
 	register mappingentry *ep;
+	object *old_value, *old_key;
+
 	if (!is_mappingobject(op)) {
 		err_badcall();
 		return -1;
@@ -319,12 +327,14 @@
 		err_setval(KeyError, key);
 		return -1;
 	}
-	DECREF(ep->me_key);
+	old_key = ep->me_key;
 	INCREF(dummy);
 	ep->me_key = dummy;
-	DECREF(ep->me_value);
+	old_value = ep->me_value;
 	ep->me_value = NULL;
 	mp->ma_used--;
+	DECREF(old_value); 
+	DECREF(old_key); 
 	return 0;
 }
 
@@ -332,18 +342,23 @@
 mappingclear(op)
 	object *op;
 {
-	int i;
-	register mappingobject *mp;
+	int i, n;
+	register mappingentry *table;
+	mappingobject *mp;
 	if (!is_mappingobject(op))
 		return;
 	mp = (mappingobject *)op;
-	for (i = 0; i < mp->ma_size; i++) {
-		XDECREF(mp->ma_table[i].me_key);
-		XDECREF(mp->ma_table[i].me_value);
-		mp->ma_table[i].me_key = NULL;
-		mp->ma_table[i].me_value = NULL;
+	table = mp->ma_table;
+	if (table == NULL)
+		return;
+	n = mp->ma_size;
+	mp->ma_size = mp->ma_used = mp->ma_fill = 0;
+	mp->ma_table = NULL;
+	for (i = 0; i < n; i++) {
+		XDECREF(table[i].me_key);
+		XDECREF(table[i].me_value);
 	}
-	mp->ma_used = 0;
+	DEL(table);
 }
 
 int
@@ -387,8 +402,7 @@
 		if (ep->me_value != NULL)
 			DECREF(ep->me_value);
 	}
-	if (mp->ma_table != NULL)
-		DEL(mp->ma_table);
+	XDEL(mp->ma_table);
 	DEL(mp);
 }
 
@@ -460,6 +474,10 @@
 {
 	object *v;
 	long hash;
+	if (mp->ma_table == NULL) {
+		err_setval(KeyError, key);
+		return NULL;
+	}
 #ifdef CACHE_HASH
 	if (!is_stringobject(key) || (hash = ((stringobject *) key)->ob_shash) == -1)
 #endif
@@ -700,7 +718,7 @@
 	hash = hashobject(key);
 	if (hash == -1)
 		return NULL;
-	ok = lookmapping(mp, key, hash)->me_value != NULL;
+	ok = mp->ma_size != 0 && lookmapping(mp, key, hash)->me_value != NULL;
 	return newintobject(ok);
 }
 
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index f7363bd..a9bc508 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -132,7 +132,7 @@
 meth_hash(a)
 	methodobject *a;
 {
-	long x, y;
+	long x;
 	if (a->m_self == NULL)
 		x = 0;
 	else {
diff --git a/Objects/object.c b/Objects/object.c
index 04e1ede..f5c22d1 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -63,7 +63,7 @@
 	if (tp->tp_alloc == 0) {
 		/* first time; hang in linked list */
 		if (tp->tp_next != NULL) /* sanity check */
-			abort();
+			fatal("XXX inc_count sanity check");
 		tp->tp_next = type_list;
 		type_list = tp;
 	}
@@ -379,24 +379,18 @@
 	register object *op;
 {
 	register object *p;
-	if (op->ob_refcnt < 0) {
-		fprintf(stderr, "UNREF negative refcnt\n");
-		abort();
-	}
+	if (op->ob_refcnt < 0)
+		fatal("UNREF negative refcnt");
 	if (op == &refchain ||
-	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
-		fprintf(stderr, "UNREF invalid object\n");
-		abort();
-	}
+	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
+		fatal("UNREF invalid object");
 #ifdef SLOW_UNREF_CHECK
 	for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
 		if (p == op)
 			break;
 	}
-	if (p == &refchain) { /* Not found */
-		fprintf(stderr, "UNREF unknown object\n");
-		abort();
-	}
+	if (p == &refchain) /* Not found */
+		fatal("UNREF unknown object");
 #endif
 	op->_ob_next->_ob_prev = op->_ob_prev;
 	op->_ob_prev->_ob_next = op->_ob_next;
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 359e4e9..ae96cea 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -159,7 +159,7 @@
 	DEL(op);
 }
 
-unsigned int
+int
 getstringsize(op)
 	register object *op;
 {
