diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 0deabe9..1aac2dc 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -2,6 +2,8 @@
 /* Range object implementation */
 
 #include "Python.h"
+#include "structmember.h"
+#include <string.h>
 
 typedef struct {
 	PyObject_HEAD
@@ -175,14 +177,30 @@
 static PyObject *
 range_getattr(rangeobject *r, char *name)
 {
+	PyObject *result;
+
 	static PyMethodDef range_methods[] = {
 		{"tolist",	(PyCFunction)range_tolist, METH_VARARGS,
                  "tolist() -> list\n"
                  "Return a list object with the same values."},
 		{NULL,		NULL}
 	};
+	static struct memberlist range_members[] = {
+		{"step",  T_LONG, offsetof(rangeobject, step), RO},
+		{"start", T_LONG, offsetof(rangeobject, start), RO},
+		{"stop",  T_LONG, 0, RO},
+		{NULL, 0, 0, 0}
+	};
 
-	return Py_FindMethod(range_methods, (PyObject *) r, name);
+	result = Py_FindMethod(range_methods, (PyObject *) r, name);
+	if (result == NULL) {
+		PyErr_Clear();
+		if (strcmp("stop", name) == 0)
+			result = PyInt_FromLong(r->start + (r->len * r->step));
+		else
+			result = PyMember_Get((char *)r, range_members, name);
+	}
+	return result;
 }
 
 static int
@@ -193,21 +211,29 @@
 	if (num < 0 && PyErr_Occurred())
 		return -1;
 
-	if ((num < r->start) || ((num - r->start) % r->step))
-		return 0;
-	if (num >= (r->start + (r->len * r->step)))
-		return 0;
+	if (r->step > 0) {
+		if ((num < r->start) || ((num - r->start) % r->step))
+			return 0;
+		if (num >= (r->start + (r->len * r->step)))
+			return 0;
+	}
+	else {
+		if ((num > r->start) || ((num - r->start) % r->step))
+			return 0;
+		if (num <= (r->start + (r->len * r->step)))
+			return 0;
+	}
 	return 1;
 }
 
 static PySequenceMethods range_as_sequence = {
-	(inquiry)range_length, /*sq_length*/
+	(inquiry)range_length,	/*sq_length*/
 	(binaryfunc)range_concat, /*sq_concat*/
 	(intargfunc)range_repeat, /*sq_repeat*/
 	(intargfunc)range_item, /*sq_item*/
 	(intintargfunc)range_slice, /*sq_slice*/
-	0,		/*sq_ass_item*/
-	0,		/*sq_ass_slice*/
+	0,			/*sq_ass_item*/
+	0,			/*sq_ass_slice*/
 	(objobjproc)range_contains, /*sq_contains*/
 };
 
