diff --git a/archive/__init__.py b/archive/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/gui/localbrowser.py b/archive/localbrowser.py
similarity index 100%
rename from gui/localbrowser.py
rename to archive/localbrowser.py
diff --git a/dejaqt/folders.py b/dejaqt/folders.py
index f5f89cf..bbc5d7f 100644
--- a/dejaqt/folders.py
+++ b/dejaqt/folders.py
@@ -13,7 +13,9 @@ class FolderLibrary(object):
             if settings:
                 self.folders.update( getattr(settings, 'DEJAQT_DIRS', {}) )
         except:
-            logging.error('DEJAQT_DIRS in django settings is corrupt.')
+            logging.error('DEJAQT_DIRS in django settings threw error.')
+            import traceback
+            traceback.print_exc()
         if folders:
             # no try here: if this fails, you got yourself a programming error.
             self.folders.update(folders)
@@ -47,24 +49,27 @@ class FolderLibrary(object):
     def matched_folder(self, url):
         m = self.match(url)
         if m is not None:
-            real_folder = self._folders[m]
-            print m
-            print url
-            print url[len(m):]
-            print os.path.split(real_folder)
-            print os.path.split(url)
-            return real_folder
+            folder = self._folders[m]
+            #heading, rest = url[:len(m)], url[len(m):]
+            rest = url[len(m):]
+            real_folder = os.path.abspath( os.path.join(folder, rest) )
+            if real_folder.startswith(os.path.abspath(folder)):
+                return real_folder
+            else:
+                logging.error('%s does not seem to be a subpath of %s' % (real_folder, folder))
         
     def print_folders(self):
         print '{'
         for k in self._keys:
-            print "'%s': '%s'" % (k, self._folders[k])
+            print "'%s': '%s'," % (k, self._folders[k])
         print '}'
     
 
 if __name__ == "__main__":
     # test this:
-    f = FolderLibrary({'abc/dab/': 'c:/dab',
+    import os
+    os.environ['DJANGO_SETTINGS_MODULE'] = 'scon.dj.settings' 
+    f = FolderLibrary({'abc/dab/': 'c:/media',
                        'abc': 'd:/abc',
                        'abc/dab/tmp': '/tmp',
                        'uiuiui': 'x:/',
@@ -75,5 +80,5 @@ if __name__ == "__main__":
     f.add_folder('abc/dub/', 'c:/dubdub')
     f.print_folders()
     
-    print f.matched_folder('abc/dab/okokok/hurnkint.pdf')
+    print f.matched_folder('abc/dab/okokok/some.png')
     
\ No newline at end of file
diff --git a/dejaqt/qweb.py b/dejaqt/qweb.py
index f7eda9d..df00913 100644
--- a/dejaqt/qweb.py
+++ b/dejaqt/qweb.py
@@ -4,6 +4,7 @@
 import os, logging
 from PyQt4 import QtCore, QtGui, QtWebKit, QtNetwork
 from django.test import Client
+from folders import FolderLibrary
 
 class DebugPage(QtWebKit.QWebPage):
     def sayMyName(self):
@@ -11,17 +12,17 @@ class DebugPage(QtWebKit.QWebPage):
 
 class DejaWebView(QtWebKit.QWebView):
     '''
-        BaseDir. Get rid of it?
+        Optional: 
+          * folders: FolderLibrary() Instance.
+          * page: Initialized QWebPage instance for initial page (default DebugPage())
     '''
     def __init__(self, *args, **kwargs):
-        basedir = kwargs.pop('basedir', None)
+        self.folders = kwargs.pop('folders', FolderLibrary())
+        page = kwargs.pop('page', DebugPage())
         QtWebKit.QWebView.__init__(self, *args, **kwargs)
-        oldManager = self.page().networkAccessManager()
-        self.setPage(DebugPage())
-        self.page().setNetworkAccessManager(DejaNetworkAccessManager(self, basedir))
-    
-    def set_basedir(self, basedir):
-        self.page().setNetworkAccessManager(DejaNetworkAccessManager(self, basedir))    
+        #self.oldManager = self.page().networkAccessManager()
+        self.setPage(page)
+        self.page().setNetworkAccessManager(DejaNetworkAccessManager(self))    
 
 class DejaNetworkAccessManager(QtNetwork.QNetworkAccessManager):
     '''
@@ -39,14 +40,11 @@ class DejaNetworkAccessManager(QtNetwork.QNetworkAccessManager):
         Note2: not sure if cookies and sessions will work this way!
     '''
     USE_NETWORK = False
-    def __init__(self, parent=None, basedir=None):
+    def __init__(self, parent=None):
         QtNetwork.QNetworkAccessManager.__init__(self, parent=None)
-        if not basedir:
-            # take current dir as basedir.
-            self.basedir = os.path.dirname(os.path.abspath(__file__))
-        else:
-            self.basedir = basedir
-
+        if parent:
+            self.folders = getattr(parent, 'folders', FolderLibrary())
+        
     def createRequest(self, operation, request, data):
         scheme = request.url().scheme()
         if scheme != 'page' and scheme != 'res':
@@ -61,13 +59,13 @@ class DejaNetworkAccessManager(QtNetwork.QNetworkAccessManager):
                 #print reply
                 return reply
             elif operation == self.PostOperation:
-                #print data.readAll()
+                print data.readAll()
                 #print request
                 reply = PageReply(self, request.url(), self.PostOperation)
                 return reply
         elif scheme == 'res':
             if operation == self.GetOperation:
-                return ImageReply(self, request.url(), self.GetOperation, self.basedir)
+                return ResourceReply(self, request.url(), self.GetOperation)
         else:
             if self.USE_NETWORK:
                 return QtNetwork.QNetworkAccessManager.createRequest(self, operation, request, data)
@@ -113,7 +111,36 @@ class BasePageReply(QtNetwork.QNetworkReply):
             self.offset = end
             return data
 
-class PageReply(BasePageReply):
+class ResourceReply(BasePageReply):
+    content_type = 'image/png'
+    
+    def determine_content_type(self, path):
+        return self.content_type
+        
+    def initialize_content(self, url, operation):
+        # determine folder:
+        path = unicode(url.path()).lstrip('/')
+        folders = getattr(self.parent(), 'folders')
+        if folders:
+            path = folders.matched_folder(path)
+            if path:
+                if os.path.exists(path):
+                    try:
+                        f = open(path, 'rb')
+                        return f.read()
+                    finally:
+                        f.close()
+                else:
+                    logging.warning('Path does not exist: %s' % path)
+            else:
+                logging.error('Containing Folder not found for %s' % path)
+        else:
+            logging.error('Configuration Error: No Folders found.')
+        return ''
+    
+class PageReply(ResourceReply):
+    content_type = 'text/html'
+    
     def initialize_content(self, url, operation):
         c = Client()
         print "Response for %s, method %s" % (url.path(), operation)
@@ -121,9 +148,12 @@ class PageReply(BasePageReply):
             response = c.get(unicode(url.path()), )
         elif operation == DejaNetworkAccessManager.PostOperation:
             response = c.post(unicode(url.path()))
+        self.content_type = response.get('Content-Type', self.content_type)
         # response code
-        print "Response Status: %s" % response.status_code
+        #print "Response Status: %s" % response.status_code
         # note: on a 404, we might need to trigger file response.
+        if response.status_code == 404:
+            return ResourceReply.initialize_content(self, url, DejaNetworkAccessManager.GetOperation)
         return response.content
 
 class NoNetworkReply(BasePageReply):
@@ -137,26 +167,3 @@ class NoNetworkReply(BasePageReply):
             </html>
         '''
 
-class ResourceReply(BasePageReply):
-    content_type = 'image/png'
-    
-    def __init__(self, parent, url, operation, basedir):
-        self.basedir = basedir
-        BasePageReply.__init__(self, parent, url, operation)
-    
-    def determine_content_type(self, path):
-        return self.content_type
-        
-    def initialize_content(self, url, operation):
-        path = os.path.join(self.basedir, unicode(url.path()).lstrip('/'))
-        if not os.path.exists(path):
-            logging.error('Image does not exist: %s' % path)
-            return ''
-        #h = url.host()
-        # @todo: host checks?
-        try:
-            f = open(path, 'rb')
-            return f.read()
-        finally:
-            f.close()
-        
\ No newline at end of file
diff --git a/dj/scon/templates/scon/base.html b/dj/scon/templates/scon/base.html
index aa58ab0..114a8fc 100644
--- a/dj/scon/templates/scon/base.html
+++ b/dj/scon/templates/scon/base.html
@@ -2,7 +2,31 @@
 
 {% block css %}
 <style>
-<!--
+<!--
+	@media print {
+		.nobreak { page-break-inside: ''; }
+		tr { page-break-inside: '';
+			 page-break-after: '';
+			 page-break-before: ''; }
+		td { page-break-inside: '';
+			 page-break-after: '';
+			 page-break-before: ''; }
+		ul { page-break-inside: avoid; }
+		.item { page-break-inside: avoid;
+				page-break-after: avoid; }
+		.panel { page-break-inside: avoid;
+				page-break-after: ''; }
+		.item-sub { page-break-inside: avoid;
+					page-break-before: ''; }
+		.remarks { page-break-inside: avoid; }
+		.arrowright { page-break-inside: avoid; }
+		.breakable {
+					page-break-inside: auto !important; 
+					page-break-before: auto !important;
+			 		page-break-after: auto !important; 
+				}
+	}
+
 	.panel { 
 		background-color: #2d2d2d;
 		color: #fafafa;
@@ -45,25 +69,25 @@
 	}
 	
 	.arrowright {
-background: #2C2C2C;
-font-size: 12px;
-position: relative;
-width: 1em;
-height: 1em;
-margin-left: -0.7em;
-color: #ffffff;
-font-size: 1.1em;
-}
-
-.arrowright::before {
-bottom: -0.666em;
-left: 0.8em;
-position: absolute;
-border-left: 1.2em solid #2C2C2C;
-border-top: 1.2em solid rgba(44, 44, 44, 0);
-border-bottom: 1.2em solid rgba(44, 44, 44, 0);
-content: "";
-}
+		background: #2C2C2C;
+		font-size: 12px;
+		position: relative;
+		width: 1em;
+		height: 1em;
+		margin-left: -0.7em;
+		color: #ffffff;
+		font-size: 1.1em;
+	}
+	
+	.arrowright::before {
+		bottom: -0.666em;
+		left: 0.8em;
+		position: absolute;
+		border-left: 1.2em solid #2C2C2C;
+		border-top: 1.2em solid rgba(44, 44, 44, 0);
+		border-bottom: 1.2em solid rgba(44, 44, 44, 0);
+		content: "";
+	}
 
 	.quality-1 {
 		color: #e3e3e3;
@@ -86,6 +110,33 @@ content: "";
 	.quality-15 {
 		color: #d76d39;
 	}
+	
+	.row {
+		width: 800px;
+	}
+	
+	.col1 {
+		width: 240px;
+	
+	}
+	
+	.col2 {
+		width: 20px;		
+	}
+	
+	.col3 {
+		width: 240px;
+	
+	}
+	
+	.col4 {
+		width: 240px;
+	
+	}
+	
+	.col {
+		display: inline-table;
+	}
 	
 -->
 </style>
diff --git a/dj/scon/templates/scon/crafting/overview.html b/dj/scon/templates/scon/crafting/overview.html
index 63c9065..37f8a0b 100644
--- a/dj/scon/templates/scon/crafting/overview.html
+++ b/dj/scon/templates/scon/crafting/overview.html
@@ -3,43 +3,40 @@
 {% block context %}
 <img src="{{MEDIA_URL}}scon/conflict-logo.png" style="position: absolute; float:left; top: -42px;">
 <h1 style="margin-left: 160px;">Crafting Overview</h1>
-<table>
-	<thead>
-		<tr>
-			<th>Source</th>
-			<th style="width: 1em;">&nbsp;</th>
-			<th>Crafts into</th>
-			<th>Also used in</th>
-		</tr>
-	</thead>
-	<tbody>
+
 	{% for item in items %}
 	{% if item.primary_recipee %}
-	<tr>
-		<td>
+	<div class="row">
+	
+	<div class="col1 col">
 		<div class="panel item">
 		{% if item.icon %}<img src="{{ MEDIA_URL }}scon/icons/{{ item.icon }}.png">{% endif %} {{ item.name }}
 		{% if item.sell_price %}<br><i>Sell: {{item.sell_price}} cr</i>{% endif %}
 		</div>
-		</td>
-		{% with item.primary_recipee as recipee %}
-		<td>
-		<div class="arrowright">{% if recipee.amount > 1 %}{{ recipee.amount }}{% endif %}</div>
-		</td>
-		<td>
-		<div class="panel item">
-		{% if recipee.output.icon %}<img src="{{ MEDIA_URL }}scon/icons/{{ recipee.output.icon }}.png">{% endif %} {{ recipee.output.html }}
-		{% if recipee.output.sell_price %}<br><i>Sell: {{recipee.output.sell_price}} cr</i>{% endif %}
-		</div>
-		<div class="panel-light item-sub">
-		<ul>
-		{% for ingredient in recipee.ingredients %}
-			<li>{{ ingredient.amount }} x {{ ingredient.item.html }}</li>
-		{% endfor %}
-		</ul>
-		</div>
-		</td>
-		<td>
+	</div>
+
+	{% with item.primary_recipee as recipee %}
+	<div class="col2 col">&nbsp;
+		<div class="arrowright nobreak">{% if recipee.amount > 1 %}{{ recipee.amount }}{% endif %}</div>
+	</div>
+	
+	<div class="col3 col">
+			<div class="nobreak">
+			<div class="panel item nobreak">
+			{% if recipee.output.icon %}<img src="{{ MEDIA_URL }}scon/icons/{{ recipee.output.icon }}.png">{% endif %} {{ recipee.output.html }}
+			{% if recipee.output.sell_price %}<br><i>Sell: {{recipee.output.sell_price}} cr</i>{% endif %}
+			</div>
+			<div class="panel-light item-sub nobreak">
+				<ul>
+				{% for ingredient in recipee.ingredients %}
+					<li>{{ ingredient.amount }} x {{ ingredient.item.html }}</li>
+				{% endfor %}
+				</ul>
+			</div>
+			</div>
+	</div>
+	
+	<div class="col4 col">
 		<ul class="remarks">
 			{% for i1 in item.crafting_used_in %}
 			{% with i1.crafting.output as ci %}
@@ -52,11 +49,10 @@
 			{% endwith %}
 			{% endfor %}
 		</ul>
-		</td>
+	</div>
 		{% endwith %}
-	</tr>
+	</div>
+	<span class="breakable">&nbsp;</span>
 	{% endif %}
 	{% endfor %}
-	</tbody>
-</table>
 {% endblock context %}
\ No newline at end of file
diff --git a/gui/viewer.py b/gui/viewer.py
index 7b7e302..5aaa9d9 100644
--- a/gui/viewer.py
+++ b/gui/viewer.py
@@ -11,8 +11,9 @@ os.environ['DJANGO_SETTINGS_MODULE'] = 'scon.dj.settings'
 #setup_environ(settings)
 import sys
 from PyQt4 import QtCore, QtGui, QtWebKit, QtNetwork
+from scon.dejaqt.folders import FolderLibrary
+from scon.dejaqt.qweb import DejaWebView
 from treeview import TreeViewModel, Node
-from localbrowser import LocalWebView
 
 class MenuTree(QtGui.QTreeView):
     def __init__(self, *args, **kwargs):
@@ -64,7 +65,9 @@ class Browser(QtGui.QMainWindow):
         self.gridLayout.addLayout(self.horizontalMainLayout)
         #
         #self.menu = MenuTree()
-        self.html = LocalWebView(basedir='D:/work/workspace/scon/src/scon/dj/scon/media/')
+        self.html = DejaWebView(folders=FolderLibrary({'':
+                                                        'D:/work/workspace/scon/src/scon/dj/scon/media/'})
+                                 )
         #self.horizontalMainLayout.addWidget(self.menu)
         self.horizontalMainLayout.addWidget(self.html)
         self.mainLayout.addWidget(self.frame)