diff --git a/EdenTV.hs b/EdenTV.hs
--- a/EdenTV.hs
+++ b/EdenTV.hs
@@ -880,6 +880,14 @@
     filterPDF `fileFilterAddPattern` ("*.pdf")
     filterPDF `fileFilterSetName` "Portable Document Format (*.pdf)"
     selectFilename `fileChooserAddFilter` filterPDF
+    filterSVG <- fileFilterNew
+    filterSVG `fileFilterAddPattern` ("*.svg")
+    filterSVG `fileFilterSetName` "Scalable Vector Graphics (*.svg)"
+    selectFilename `fileChooserAddFilter` filterSVG
+    filterPS <- fileFilterNew
+    filterPS `fileFilterAddPattern` ("*.ps")
+    filterPS `fileFilterSetName` "PostScript (*.ps)"
+    selectFilename `fileChooserAddFilter` filterPS
     addSpecialFilters selectFilename pixbufGetFormats
     -- show and run the dialog:
     widgetShow selectFilename
@@ -889,7 +897,7 @@
         ResponseOk     -> do
             Just filename <- fileChooserGetFilename selectFilename
             let filetype = reverse (takeWhile (/= '.') (reverse filename)) -- extract the choosen filetype
-            if (elem filetype ["bmp","jpg","jpeg","png", "pdf"]) -- filetype recognized?
+            if (elem filetype ["bmp","jpg","jpeg","png", "pdf", "svg", "ps"]) -- filetype recognized?
                 then do
                     widgetDestroy selectFilename
                     pathExists <- doesDirectoryExist filename
@@ -907,11 +915,14 @@
                                 if (elem filetype ["bmp","jpg","jpeg","png"])
                                     then pixbufSave p filename (pack $ if filetype == "jpg" then "jpeg" else filetype) ([] :: [(String, String)])
                                     else do
+                                            let withSurface | filetype == "svg" = withSVGSurface
+                                                            | filetype == "ps"  = withPSSurface
+                                                            | otherwise         = withPDFSurface
                                             case v of
-                                                 3 -> withPDFSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawGroupProcesses)   pic traces st edentvState nt ) 
-                                                 2 -> withPDFSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawThreads)   pic traces st edentvState nt ) 
-                                                 1 -> withPDFSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawProcesses)   pic traces st edentvState nt )
-                                                 _ -> withPDFSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawMachines)   pic traces st edentvState nt )
+                                                 3 -> withSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawGroupProcesses)   pic traces st edentvState nt ) 
+                                                 2 -> withSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawThreads)   pic traces st edentvState nt ) 
+                                                 1 -> withSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawProcesses)   pic traces st edentvState nt )
+                                                 _ -> withSurface filename (fromIntegral visW) (fromIntegral visH) (\s -> drawAnyPic drawBlockMsgs drawStartupMarker hideStartupPhase drawDataMsgs drawSystemMsgs (-(fromIntegral visX)) (-(fromIntegral visY)) (renderWith s) (drawMachines)   pic traces st edentvState nt )
                         else return ()
                 else do -- unknown filetype
                     widgetDestroy selectFilename
diff --git a/EdenTvViewer.hs b/EdenTvViewer.hs
--- a/EdenTvViewer.hs
+++ b/EdenTvViewer.hs
@@ -26,7 +26,7 @@
 import Control.Concurrent.MVar
 import Data.List (foldl')
 import qualified Data.Map.Strict as MS
-import Graphics.UI.Gtk hiding (get)
+import Graphics.UI.Gtk hiding (get, rectangle)
 import Graphics.UI.Gtk.Gdk.Pixbuf
 import Graphics.Rendering.Cairo
 import Numeric
@@ -125,7 +125,7 @@
 
         drawMessages drawBlkMsg drawDataMsgs drawSystemMsgs hideStartupPhase pixelsPerSecond transX transY target traces' pic state colorsMap
         when (drawStartup && (not hideStartupPhase)) $ drawStartupMarker pixelsPerSecond transX transY target traces' pic state colorsMap
-        target showPage -- only for pdf export -- ortherwise useless
+        target copyPage -- only for pdf export -- otherwise useless
 
         -- finally draw axes on top of everything
         target drawAxes
@@ -576,6 +576,7 @@
         let maxTime = max_t events
             maxSTime = max_t_diff events
             drawAxes = do
+                        translate visX visY
                         drawTimes (autoTicks state) (tickSkip state) (tickMark state) (minTime,maxTime,maxSTime) (locTime state) cv cr color
                         translate 0 (uly)
                         drawNames (fromIntegral vx + ulx - 5) (lry-uly) (map (ySkip *) sort) names color
@@ -647,6 +648,7 @@
         let maxTime = max_t events
             maxSTime = max_t_diff events
             drawAxes = do
+                translate visX visY
                 drawTimes (autoTicks state) (tickSkip state) (tickMark state) (minTime,maxTime,maxSTime) (locTime state) cv cr color
                 translate 0 (uly)
                 drawNames (fromIntegral vx + ulx - 5) (lry-uly)  (map (ySkip *) sort) names color
@@ -772,6 +774,7 @@
         let maxTime = max_t events
             maxSTime = max_t_diff events
             drawAxes = do
+                translate visX visY
                 drawTimes (autoTicks state) (tickSkip state) (tickMark state) (minTime,maxTime,maxSTime) (locTime state) cv cr color
                 translate 0 (uly)
                 drawGroupNames sortedGroupedProcess 0
diff --git a/edentv.cabal b/edentv.cabal
--- a/edentv.cabal
+++ b/edentv.cabal
@@ -1,5 +1,5 @@
 name:                edentv
-version:             4.9.2
+version:             4.10.0
 synopsis:            A Tool to Visualize Parallel Functional Program Executions
 description:         The Eden Trace Viewer is a tool designed to help
                      programmers optimize Eden programs by visualising traces
diff --git a/edentv.ui b/edentv.ui
--- a/edentv.ui
+++ b/edentv.ui
@@ -1096,7 +1096,7 @@
                 <property name="visible">True</property>
                 <property name="label" translatable="yes">Filetype unknown!
 
-Use one of png, bmp, jpeg.  </property>
+Use one of png, bmp, jpeg, pdf, svg, ps.  </property>
               </object>
               <packing>
                 <property name="fill">False</property>
