Index: TileCache/Layers/Mapnik.py
===================================================================
--- TileCache/Layers/Mapnik.py	(revision 358)
+++ TileCache/Layers/Mapnik.py	(working copy)
@@ -24,8 +24,7 @@
             self.fonts = []
             
     def renderTile(self, tile):
-        import mapnik, StringIO
-        import PIL.Image 
+        import mapnik
         
         if self.mapnik:
             m = self.mapnik
@@ -67,14 +66,23 @@
         im = mapnik.Image( *tile.size() )
         mapnik.render(m, im)
         if hasattr(im, 'tostring'):
-            data = im.tostring()
+            if self.paletted:
+                data = im.tostring('png256')
+            else:
+                data = im.tostring(self.extension)
+            tile.data = data
+            return tile.data
         elif hasattr(mapnik, 'rawdata'):
             data = mapnik.rawdata(im)
+            import PIL.Image, StringIO
+            im = PIL.Image.fromstring('RGBA', tile.size(), data)
+            buffer = StringIO.StringIO()
+            if self.paletted:
+                print >>sys.stderr, "Mapnik's 8-bit (png256) format not supported with PIL"
+            im.save(buffer, self.extension)
+            buffer.seek(0)
+            tile.data = buffer.read()
+            return tile.data 
         else:
             raise Exception("Something is wrong: your version of Mapnik can't create a string from an image.") 
-        im = PIL.Image.fromstring('RGBA', tile.size(), data)
-        buffer = StringIO.StringIO()
-        im.save(buffer, self.extension)
-        buffer.seek(0)
-        tile.data = buffer.read()
-        return tile.data 
+    
\ No newline at end of file
Index: TileCache/Layer.py
===================================================================
--- TileCache/Layer.py	(revision 358)
+++ TileCache/Layer.py	(working copy)
@@ -134,6 +134,7 @@
         self.name   = name
         self.description = description
         self.layers = layers or name
+        self.paletted = False
         
         self.spherical_mercator = spherical_mercator and spherical_mercator.lower() in ["yes", "y", "t", "true"]
         if self.spherical_mercator:
@@ -161,6 +162,9 @@
         
         if extension.lower() == 'jpg': 
             extension = 'jpeg' # MIME
+        elif extension.lower() == 'png256':
+            extension = 'png'
+            self.paletted = True
         self.extension = extension.lower()
         self.mime_type = mime_type or self.format() 
         
