diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 32ab90e..28614a6 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -419,7 +419,7 @@
 
     def tearDown(self):
         self.file.close()
-        os.remove(test.test_support.TESTFN)
+        test.test_support.unlink(test.test_support.TESTFN)
 
     def check_sizeof(self, o, size):
         result = sys.getsizeof(o)
@@ -435,13 +435,13 @@
             return value
 
     def test_align(self):
-        self.assertTrue( (self.align(0) % self.p) == 0 )
-        self.assertTrue( (self.align(1) % self.p) == 0 )
-        self.assertTrue( (self.align(3) % self.p) == 0 )
-        self.assertTrue( (self.align(4) % self.p) == 0 )
-        self.assertTrue( (self.align(7) % self.p) == 0 )
-        self.assertTrue( (self.align(8) % self.p) == 0 )
-        self.assertTrue( (self.align(9) % self.p) == 0 )
+        self.assertEqual(self.align(0) % self.p, 0)
+        self.assertEqual(self.align(1) % self.p, 0)
+        self.assertEqual(self.align(3) % self.p, 0)
+        self.assertEqual(self.align(4) % self.p, 0)
+        self.assertEqual(self.align(7) % self.p, 0)
+        self.assertEqual(self.align(8) % self.p, 0)
+        self.assertEqual(self.align(9) % self.p, 0)
 
     def test_standardtypes(self):
         i = self.i
@@ -507,7 +507,7 @@
         self.check_sizeof(abs, h + 3*p)
         # module
         self.check_sizeof(unittest, h + p)
-        # xange
+        # xrange
         self.check_sizeof(xrange(1), h + 3*p)
         # slice
         self.check_sizeof(slice(0), h + 3*p)
@@ -520,8 +520,8 @@
         # type (PyTypeObject + PyNumberMethods +  PyMappingMethods +
         #       PySequenceMethods +  PyBufferProcs)
         len_typeobject = p + 2*l + 15*p + l + 4*p + l + 9*p + l + 11*p
-        self.check_sizeof(class_newstyle, h + \
-                              len_typeobject + 42*p + 10*p + 3*p + 6*p)
+        self.check_sizeof(class_newstyle,
+                          h + len_typeobject + 42*p + 10*p + 3*p + 6*p)
 
 
     def test_specialtypes(self):
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 0de24f8..61ee42a 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3918,7 +3918,7 @@
 }
 
 PyDoc_STRVAR(sizeof__doc__,
-"S.__sizeof__() -> size of S in bytes");
+"S.__sizeof__() -> size of S in memory, in bytes");
 
 static PyObject *
 string_sizeof(PyBytesObject *v)
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index d3a7cb9..6b15131 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -2052,7 +2052,7 @@
 PyDoc_STRVAR(getitem__doc__, "x.__getitem__(y) <==> x[y]");
 
 PyDoc_STRVAR(sizeof__doc__,
-"D.__sizeof__() -> size of D in bytes");
+"D.__sizeof__() -> size of D in memory, in bytes");
 
 PyDoc_STRVAR(get__doc__,
 "D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.");
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 0216a85..796e8cb 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2437,7 +2437,7 @@
 PyDoc_STRVAR(reversed_doc,
 "L.__reversed__() -- return a reverse iterator over the list");
 PyDoc_STRVAR(sizeof_doc,
-"L.__sizeof__() -- size of L in bytes");
+"L.__sizeof__() -- size of L in memory, in bytes");
 PyDoc_STRVAR(append_doc,
 "L.append(object) -- append object to end");
 PyDoc_STRVAR(extend_doc,
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 5876495..c9d138b 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3467,7 +3467,7 @@
 	{"__getnewargs__",	(PyCFunction)long_getnewargs,	METH_NOARGS},
         {"__format__", (PyCFunction)long__format__, METH_VARARGS},
 	{"__sizeof__",	(PyCFunction)long_sizeof, METH_NOARGS,
-	 "Returns size in bytes"},
+	 "Returns size in memory, in bytes"},
 	{NULL,		NULL}		/* sentinel */
 };
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 5405fec..e88ca05 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3421,7 +3421,7 @@
         {"__format__", object_format, METH_VARARGS,
          PyDoc_STR("default object formatter")},
         {"__sizeof__", object_sizeof, METH_NOARGS,
-         PyDoc_STR("__sizeof__() -> size of object in bytes")},
+         PyDoc_STR("__sizeof__() -> size of object in memory, in bytes")},
 	{0}
 };
 
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 54d0ddd..9564267 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -664,9 +664,9 @@
 		return PyObject_CallFunctionObjArgs(method, args, NULL);
 	} 
 	/* Instance of old-style classes */
-	else if(PyInstance_Check(args))
+	else if (PyInstance_Check(args))
 		return PyInt_FromSsize_t(PyInstance_Type.tp_basicsize);
-	/* Old-style class */
+	/* Old-style classes */
 	else if (PyClass_Check(args))
 		return PyInt_FromSsize_t(PyClass_Type.tp_basicsize);
 	else
