diff --git a/Mac/Demo/imgbrowse/imgbrowse.py b/Mac/Demo/imgbrowse/imgbrowse.py
index ff778bf..ab9b429 100644
--- a/Mac/Demo/imgbrowse/imgbrowse.py
+++ b/Mac/Demo/imgbrowse/imgbrowse.py
@@ -13,6 +13,7 @@
 import imgformat
 import macfs
 import struct
+import mac_image
 
 
 # Where is the picture window?
@@ -23,44 +24,6 @@
 MAXWIDTH=320
 MAXHEIGHT=320
 
-def dumppixmap(data):
-	baseAddr, \
-		rowBytes, \
-		t, l, b, r, \
-		pmVersion, \
-		packType, packSize, \
-		hRes, vRes, \
-		pixelType, pixelSize, \
-		cmpCount, cmpSize, \
-		planeBytes, pmTable, pmReserved \
-			= struct.unpack("lhhhhhhhlllhhhhlll", data)
-	print 'Base:       0x%x'%baseAddr
-	print 'rowBytes:   %d (0x%x)'%(rowBytes&0x3fff, rowBytes)
-	print 'rect:       %d, %d, %d, %d'%(t, l, b, r)
-	print 'pmVersion:  0x%x'%pmVersion
-	print 'packing:    %d %d'%(packType, packSize)
-	print 'resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000)
-	print 'pixeltype:  %d, size %d'%(pixelType, pixelSize)
-	print 'components: %d, size %d'%(cmpCount, cmpSize)
-	print 'planeBytes: %d (0x%x)'%(planeBytes, planeBytes)
-	print 'pmTable:    0x%x'%pmTable
-	print 'pmReserved: 0x%x'%pmReserved
-
-def mk16pixmap(w, h, data):
-	"""kludge a pixmap together"""
-	rv = struct.pack("lhhhhhhhlllhhhhlll",
-		id(data)+12,
-		w*2 + 0x8000,
-		0, 0, h, w,
-		0,
-		0, 0, # XXXX?
-		72<<16, 72<<16,
-		16, 16, # XXXX
-		3, 5,
-		0, 0, 0)
-	print 'Our pixmap, size %d:'%len(rv)
-	dumppixmap(rv)
-	return Qd.RawBitMap(rv)
 
 def main():
 	print 'hello world'
@@ -98,12 +61,12 @@
 		bar.set(10)
 		data = rdr.read()
 		del bar
-		pixmap = mk16pixmap(w, h, data)
-		self.showimg(w, h, pixmap)
+		pixmap = mac_image.mkpixmap(w, h, imgformat.macrgb16, data)
+		self.showimg(w, h, pixmap, data)
 			
-	def showimg(self, w, h, pixmap):
+	def showimg(self, w, h, pixmap, data):
 		win = imgwindow(self)
-		win.open(w, h, pixmap)
+		win.open(w, h, pixmap, data)
 		self.lastwin = win
 
 	def info(self, *args):
@@ -111,8 +74,9 @@
 			self.lastwin.info()		
 		
 class imgwindow(FrameWork.Window):
-	def open(self, width, height, pixmap):
+	def open(self, width, height, pixmap, data):
 		self.pixmap = pixmap
+		self.data = data
 		self.pictrect = (0, 0, width, height)
 		bounds = (LEFT, TOP, LEFT+width, TOP+height)
 		
@@ -128,8 +92,7 @@
 				currect, QuickDraw.srcCopy, None)
 		self.info()
 		Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
-				currect, QuickDraw.srcCopy+QuickDraw.ditherCopy, None)
-##		Qd.DrawPicture(self.picture, currect)
+				currect, QuickDraw.srcCopy, None)
 		
 	def fitrect(self):
 		"""Return self.pictrect scaled to fit in window"""
@@ -151,6 +114,6 @@
 	def info(self):
 		graf = self.wid.GetWindowPort()
 		bits = graf.portBits
-		dumppixmap(bits.pixmap_data)
+		mac_image.dumppixmap(bits.pixmap_data)
 
 main()
diff --git a/Mac/Demo/imgbrowse/mac_image.py b/Mac/Demo/imgbrowse/mac_image.py
new file mode 100644
index 0000000..e2639c9
--- /dev/null
+++ b/Mac/Demo/imgbrowse/mac_image.py
@@ -0,0 +1,55 @@
+"""mac_image - Helper routines (hacks) for images"""
+import imgformat
+import Qd
+import time
+import struct
+
+_fmt_to_mac = {
+	imgformat.macrgb16 : (16, 16, 3, 5),
+}
+
+def mkpixmap(w, h, fmt, data):
+	"""kludge a pixmap together"""
+	fmtinfo = _fmt_to_mac[fmt]
+	
+	rv = struct.pack("lhhhhhhhlllhhhhlll",
+		id(data)+16,
+		w*2 + 0x8000,
+		0, 0, h, w,
+		0,
+		0, 0, # XXXX?
+		72<<16, 72<<16,
+		fmtinfo[0], fmtinfo[1],
+		fmtinfo[2], fmtinfo[3],
+		0, 0, 0)
+##	print 'Our pixmap, size %d:'%len(rv)
+##	dumppixmap(rv)
+	return Qd.RawBitMap(rv)
+
+def dumppixmap(data):
+	baseAddr, \
+		rowBytes, \
+		t, l, b, r, \
+		pmVersion, \
+		packType, packSize, \
+		hRes, vRes, \
+		pixelType, pixelSize, \
+		cmpCount, cmpSize, \
+		planeBytes, pmTable, pmReserved \
+			= struct.unpack("lhhhhhhhlllhhhhlll", data)
+	print 'Base:       0x%x'%baseAddr
+	print 'rowBytes:   %d (0x%x)'%(rowBytes&0x3fff, rowBytes)
+	print 'rect:       %d, %d, %d, %d'%(t, l, b, r)
+	print 'pmVersion:  0x%x'%pmVersion
+	print 'packing:    %d %d'%(packType, packSize)
+	print 'resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000)
+	print 'pixeltype:  %d, size %d'%(pixelType, pixelSize)
+	print 'components: %d, size %d'%(cmpCount, cmpSize)
+	print 'planeBytes: %d (0x%x)'%(planeBytes, planeBytes)
+	print 'pmTable:    0x%x'%pmTable
+	print 'pmReserved: 0x%x'%pmReserved
+	for i in range(0, len(data), 16):
+		for j in range(16):
+			if i + j < len(data):
+				print '%02.2x'%ord(data[i+j]),
+		print
