New internal function BMObj_NewCopied() which copies the BitMap. Used to get the screenBits bitmap.
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 7c9d49b..34476d4 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -11,7 +11,7 @@
 #include <QuickDraw.h>
 
 #if !ACCESSOR_CALLS_ARE_FUNCTIONS
-#define GetPortBitMapForCopyBits(port) (((GrafPort)(port))->portBits)
+#define GetPortBitMapForCopyBits(port) ((const struct BitMap *)&((GrafPort *)(port))->portBits)
 #define GetPortPixMap(port) (((CGrafPtr)(port))->portPixMap)
 #define GetPortBounds(port, bounds) (*(bounds) = (port)->portRect, (bounds))
 #define GetPortForeColor(port, color) (*(color) = (port)->rgbFgColor, (color))
@@ -79,6 +79,8 @@
 #define QDIsPortBuffered(port) 0
 #endif /* !TARGET_API_MAC_CARBON  */
 
+staticforward PyObject *BMObj_NewCopied(BitMapPtr);
+
 /*
 ** Parse/generate RGB records
 */
@@ -115,8 +117,6 @@
 			itself->widMax, itself->leading);
 }
 
-
-
 static PyObject *Qd_Error;
 
 /* ---------------------- Object type GrafPort ---------------------- */
@@ -584,7 +584,7 @@
 		if ( strcmp(name, "screenBits") == 0 ) {
 			BitMap rv;
 			GetQDGlobalsScreenBits(&rv);
-			return BMObj_New(&rv);
+			return BMObj_NewCopied(&rv);
 		}
 		if ( strcmp(name, "thePort") == 0 ) 
 			return GrafObj_New(GetQDGlobalsThePort());
@@ -4521,7 +4521,7 @@
 		return NULL;
 	GetQDGlobalsScreenBits(&screenBits);
 	_res = Py_BuildValue("O&",
-	                     BMObj_New, &screenBits);
+	                     BMObj_NewCopied, &screenBits);
 	return _res;
 }
 
@@ -6162,6 +6162,24 @@
 
 
 
+/* Like BMObj_New, but the original bitmap data structure is copied (and
+** released when the object is released)
+*/
+PyObject *BMObj_NewCopied(itself)
+	BitMapPtr itself;
+{
+	BitMapObject *it;
+	BitMapPtr itself_copy;
+	
+	if ((itself_copy=(BitMapPtr)malloc(sizeof(BitMap))) == NULL)
+		return PyErr_NoMemory();
+	*itself_copy = *itself;
+	it = (BitMapObject *)BMObj_New(itself_copy);
+	it->referred_bitmap = itself_copy;
+	return (PyObject *)it;
+}
+
+
 
 void initQd()
 {