diff --git a/Objects/intobject.c b/Objects/intobject.c
index 7a69238..391cd80 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -7,6 +7,7 @@
 #include "intobject.h"
 #include "stringobject.h"
 #include "objimpl.h"
+#include "errors.h"
 
 /* Standard Booleans */
 intobject FalseObject = {
@@ -18,6 +19,20 @@
 	1
 };
 
+static object *
+err_ovf()
+{
+	err_setstr(RuntimeError, "integer overflow");
+	return NULL;
+}
+
+static object *
+err_zdiv()
+{
+	err_setstr(RuntimeError, "division by zero");
+	return NULL;
+}
+
 object *
 newintobject(ival)
 	long ival;
@@ -25,7 +40,7 @@
 	/* For efficiency, this code is copied from newobject() */
 	register intobject *op = (intobject *) malloc(sizeof(intobject));
 	if (op == NULL) {
-		errno = ENOMEM;
+		err_nomem();
 	}
 	else {
 		NEWREF(op);
@@ -40,7 +55,7 @@
 	register object *op;
 {
 	if (!is_intobject(op)) {
-		errno = EBADF;
+		err_badarg();
 		return -1;
 	}
 	else
@@ -83,16 +98,14 @@
 {
 	register long a, b, x;
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
 	a = v->ob_ival;
 	b = ((intobject *)w) -> ob_ival;
 	x = a + b;
-	if ((x^a) < 0 && (x^b) < 0) {
-		errno = ERANGE;
-		return NULL;
-	}
+	if ((x^a) < 0 && (x^b) < 0)
+		return err_ovf();
 	return newintobject(x);
 }
 
@@ -103,16 +116,14 @@
 {
 	register long a, b, x;
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
 	a = v->ob_ival;
 	b = ((intobject *)w) -> ob_ival;
 	x = a - b;
-	if ((x^a) < 0 && (x^~b) < 0) {
-		errno = ERANGE;
-		return NULL;
-	}
+	if ((x^a) < 0 && (x^~b) < 0)
+		return err_ovf();
 	return newintobject(x);
 }
 
@@ -124,16 +135,14 @@
 	register long a, b;
 	double x;
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
 	a = v->ob_ival;
 	b = ((intobject *)w) -> ob_ival;
 	x = (double)a * (double)b;
-	if (x > 0x7fffffff || x < (double) (long) 0x80000000) {
-		errno = ERANGE;
-		return NULL;
-	}
+	if (x > 0x7fffffff || x < (double) (long) 0x80000000)
+		return err_ovf();
 	return newintobject(a * b);
 }
 
@@ -143,13 +152,11 @@
 	register object *w;
 {
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
-	if (((intobject *)w) -> ob_ival == 0) {
-		errno = EDOM;
-		return NULL;
-	}
+	if (((intobject *)w) -> ob_ival == 0)
+		err_zdiv();
 	return newintobject(v->ob_ival / ((intobject *)w) -> ob_ival);
 }
 
@@ -159,13 +166,11 @@
 	register object *w;
 {
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
-	if (((intobject *)w) -> ob_ival == 0) {
-		errno = EDOM;
-		return NULL;
-	}
+	if (((intobject *)w) -> ob_ival == 0)
+		err_zdiv();
 	return newintobject(v->ob_ival % ((intobject *)w) -> ob_ival);
 }
 
@@ -177,7 +182,7 @@
 	register long iv, iw, ix;
 	register int neg;
 	if (!is_intobject(w)) {
-		errno = EINVAL;
+		err_badarg();
 		return NULL;
 	}
 	iv = v->ob_ival;
@@ -189,10 +194,8 @@
 	for (; iw > 0; iw--)
 		ix = ix * iv;
 	if (neg) {
-		if (ix == 0) {
-			errno = EDOM;
-			return NULL;
-		}
+		if (ix == 0)
+			err_zdiv();
 		ix = 1/ix;
 	}
 	/* XXX How to check for overflow? */
@@ -206,10 +209,8 @@
 	register long a, x;
 	a = v->ob_ival;
 	x = -a;
-	if (a < 0 && x < 0) {
-		errno = ERANGE;
-		return NULL;
-	}
+	if (a < 0 && x < 0)
+		return err_ovf();
 	return newintobject(x);
 }
 
