--- numpy/core/src/multiarraymodule.c.orig	2007-08-02 20:29:51.000000000 -0300
+++ numpy/core/src/multiarraymodule.c	2007-08-02 20:51:11.000000000 -0300
@@ -5606,15 +5606,18 @@
 			if (!copy && STRIDING_OK(op, order)) {
 				Py_INCREF(op);
 				ret = op;
+				Py_DECREF(type);
 				goto finish;
 			}
 			else {
 				ret = PyArray_NewCopy((PyArrayObject*)op,
 						      order);
-				if (oldtype == type) goto finish;
-				Py_INCREF(oldtype);
-				Py_DECREF(PyArray_DESCR(ret));
-				PyArray_DESCR(ret) = oldtype;
+				if (oldtype != type) {
+					Py_INCREF(oldtype);
+					Py_DECREF(PyArray_DESCR(ret));
+					PyArray_DESCR(ret) = oldtype;
+				}
+				Py_DECREF(type);
 				goto finish;
 			}
 		}
@@ -6803,14 +6806,17 @@
 	PyObject *o_start=NULL, *o_stop=NULL, *o_step=NULL;
 	static char *kwd[]= {"start", "stop", "step", "dtype", NULL};
 	PyArray_Descr *typecode=NULL;
-
+	PyObject *ret;
+	
 	if(!PyArg_ParseTupleAndKeywords(args, kws, "O|OOO&", kwd, &o_start,
 					&o_stop, &o_step,
 					PyArray_DescrConverter2,
 					&typecode))
 		return NULL;
 
-	return PyArray_ArangeObj(o_start, o_stop, o_step, typecode);
+	ret = PyArray_ArangeObj(o_start, o_stop, o_step, typecode);
+	Py_XDECREF(typecode);
+	return ret;
 }
 
 /*
