diff --git a/Include/longobject.h b/Include/longobject.h
index 774bfda..d9bc086 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -51,11 +51,14 @@
 extern double PyLong_AsDouble Py_PROTO((PyObject *));
 
 #ifdef HAVE_LONG_LONG
-extern PyObject *PyLong_FromLongLong Py_PROTO((long long ));
-extern PyObject *PyLong_FromUnsignedLongLong Py_PROTO((unsigned long long));
-extern long long PyLong_AsLongLong Py_PROTO((PyObject *));
-extern unsigned long long PyLong_AsUnsignedLongLong Py_PROTO((PyObject *));
+#ifndef LONG_LONG
+#define LONG_LONG long long
 #endif
+extern PyObject *PyLong_FromLongLong Py_PROTO((LONG_LONG));
+extern PyObject *PyLong_FromUnsignedLongLong Py_PROTO((unsigned LONG_LONG));
+extern LONG_LONG PyLong_AsLongLong Py_PROTO((PyObject *));
+extern unsigned LONG_LONG PyLong_AsUnsignedLongLong Py_PROTO((PyObject *));
+#endif /* HAVE_LONG_LONG */
 
 PyObject *PyLong_FromString Py_PROTO((char *, char **, int));
 
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 992e769..742b184 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -279,7 +279,7 @@
 
 #ifdef HAVE_LONG_LONG
 /*
- * long long support by Chris Herborth (chrish@qnx.com)
+ * LONG_LONG support by Chris Herborth (chrish@qnx.com)
  *
  * For better or worse :-), I tried to follow the coding style already
  * here.
@@ -303,30 +303,30 @@
 #define ULONGLONG_MAX 0xffffffffffffffffULL
 #endif
 
-/* Create a new long int object from a C long long int */
+/* Create a new long int object from a C LONG_LONG int */
 
 PyObject *
 PyLong_FromLongLong(ival)
-	long long ival;
+	LONG_LONG ival;
 {
 #if SIZEOF_LONG_LONG == SIZEOF_LONG
 	/* In case the compiler is faking it. */
 	return PyLong_FromLong( (long)ival );
 #else
-	if( ival <= (long long)LONG_MAX ) {
+	if( ival <= (LONG_LONG)LONG_MAX ) {
 		return PyLong_FromLong( (long)ival );
 	}
-	else if( ival <= (unsigned long long)ULONG_MAX ) {
+	else if( ival <= (unsigned LONG_LONG)ULONG_MAX ) {
 		return PyLong_FromUnsignedLong( (unsigned long)ival );
 	}
 	else {
-		/* Assume a C long long fits in at most 10 'digits'.
+		/* Assume a C LONG_LONG fits in at most 10 'digits'.
 		 * Should be OK if we're assuming long fits in 5.
 		 */
 		PyLongObject *v = _PyLong_New(10);
 
 		if (v != NULL) {
-			unsigned long long t = ival;
+			unsigned LONG_LONG t = ival;
 			int i;
 			if (ival < 0) {
 				t = -ival;
@@ -350,16 +350,16 @@
 #endif
 }
 
-/* Create a new long int object from a C unsigned long long int */
+/* Create a new long int object from a C unsigned LONG_LONG int */
 PyObject *
 PyLong_FromUnsignedLongLong(ival)
-	unsigned long long ival;
+	unsigned LONG_LONG ival;
 {
 #if SIZEOF_LONG_LONG == SIZEOF_LONG
 	/* In case the compiler is faking it. */
 	return PyLong_FromUnsignedLong( (unsigned long)ival );
 #else
-	if( ival <= (unsigned long long)ULONG_MAX ) {
+	if( ival <= (unsigned LONG_LONG)ULONG_MAX ) {
 		return PyLong_FromUnsignedLong( (unsigned long)ival );
 	}
 	else {
@@ -367,7 +367,7 @@
 		PyLongObject *v = _PyLong_New(10);
 
 		if (v != NULL) {
-			unsigned long long t = ival;
+			unsigned LONG_LONG t = ival;
 			int i;
 			for (i = 0; i < 10; i++) {
 				v->ob_digit[i] = (digit) (t & MASK);
@@ -386,19 +386,19 @@
 #endif
 }
 
-/* Get a C long long int from a long int object.
+/* Get a C LONG_LONG int from a long int object.
    Returns -1 and sets an error condition if overflow occurs. */
 
-long long
+LONG_LONG
 PyLong_AsLongLong(vv)
 	PyObject *vv;
 {
 #if SIZEOF_LONG_LONG == SIZEOF_LONG
 	/* In case the compiler is faking it. */
-	return (long long)PyLong_AsLong( vv );
+	return (LONG_LONG)PyLong_AsLong( vv );
 #else
 	register PyLongObject *v;
-	long long x, prev;
+	LONG_LONG x, prev;
 	int i, sign;
 	
 	if (vv == NULL || !PyLong_Check(vv)) {
@@ -430,21 +430,21 @@
 #endif
 }
 
-unsigned long long
+unsigned LONG_LONG
 PyLong_AsUnsignedLongLong(vv)
 	PyObject *vv;
 {
 #if SIZEOF_LONG_LONG == 4
 	/* In case the compiler is faking it. */
-	return (unsigned long long)PyLong_AsUnsignedLong( vv );
+	return (unsigned LONG_LONG)PyLong_AsUnsignedLong( vv );
 #else
 	register PyLongObject *v;
-	unsigned long long x, prev;
+	unsigned LONG_LONG x, prev;
 	int i;
 	
 	if (vv == NULL || !PyLong_Check(vv)) {
 		PyErr_BadInternalCall();
-		return (unsigned long long) -1;
+		return (unsigned LONG_LONG) -1;
 	}
 
 	v = (PyLongObject *)vv;
@@ -454,7 +454,7 @@
 	if (i < 0) {
 		PyErr_SetString(PyExc_OverflowError,
 			   "can't convert negative value to unsigned long");
-		return (unsigned long long) -1;
+		return (unsigned LONG_LONG) -1;
 	}
 
 	while (--i >= 0) {
@@ -463,7 +463,7 @@
 		if ((x >> SHIFT) != prev) {
 			PyErr_SetString(PyExc_OverflowError,
 				"long int too long to convert");
-			return (unsigned long long) -1;
+			return (unsigned LONG_LONG) -1;
 		}
 	}
 
@@ -907,7 +907,7 @@
 static void long_dealloc Py_PROTO((PyObject *));
 static PyObject *long_repr Py_PROTO((PyObject *));
 static int long_compare Py_PROTO((PyLongObject *, PyLongObject *));
-static long long_hash Py_PROTO((PyLongObject *));
+static LONG_LONG_hash Py_PROTO((PyLongObject *));
 
 static PyObject *long_add Py_PROTO((PyLongObject *, PyLongObject *));
 static PyObject *long_sub Py_PROTO((PyLongObject *, PyLongObject *));
diff --git a/PC/config.h b/PC/config.h
index 0bc8cc5..495b985 100644
--- a/PC/config.h
+++ b/PC/config.h
@@ -85,6 +85,8 @@
 #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
 #endif
 
+#define HAVE_LONG_LONG 1
+#define LONG_LONG __int64
 #endif /* _MSC_VER && > 850 */
 
 #if defined(_MSC_VER) && _MSC_VER <= 850
diff --git a/Python/getargs.c b/Python/getargs.c
index 34e3a5c..86fd471 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -500,11 +500,11 @@
 		}
 	
 #if HAVE_LONG_LONG
-	case 'L': /* long long */
+	case 'L': /* LONG_LONG */
 		{
-			long long *p = va_arg( *p_va, long long * );
-			long long ival = PyLong_AsLongLong( arg );
-			if( ival == (long long)-1 && PyErr_Occurred() ) {
+			LONG_LONG *p = va_arg( *p_va, LONG_LONG * );
+			LONG_LONG ival = PyLong_AsLongLong( arg );
+			if( ival == (LONG_LONG)-1 && PyErr_Occurred() ) {
 				return "long<L>";
 			} else {
 				*p = ival;
@@ -1003,9 +1003,9 @@
 		}
 	
 #if HAVE_LONG_LONG
-	case 'L': /* long long int */
+	case 'L': /* LONG_LONG int */
 		{
-			(void) va_arg(*p_va, long long *);
+			(void) va_arg(*p_va, LONG_LONG *);
 			break;
 		}
 #endif
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 7e1acab..6066aa8 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -293,7 +293,7 @@
 
 #if HAVE_LONG_LONG
 		case 'L':
-			return PyLong_FromLongLong((long long)va_arg(*p_va, long long));
+			return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG));
 #endif
 
 		case 'f':
