diff --git a/probability.cabal b/probability.cabal
--- a/probability.cabal
+++ b/probability.cabal
@@ -1,5 +1,5 @@
 Name:               probability
-Version:            0.2.3.1
+Version:            0.2.4
 License:            BSD3
 License-File:       COPYRIGHT
 Author:             Martin Erwig <erwig@eecs.oregonstate.edu>, Steve Kollmansberger
@@ -28,7 +28,7 @@
 Source-Repository this
   type:     darcs
   location: http://code.haskell.org/~thielema/probability/
-  tag:      0.2.3.1
+  tag:      0.2.4
 
 
 Flag splitBase
@@ -37,7 +37,7 @@
 Library
   Build-Depends:
     utility-ht >=0.0.6 && <0.1,
-    transformers >=0.0.1 && <0.3
+    transformers >=0.0.1 && <0.4
   If flag(splitBase)
     Build-Depends:
       containers >=0.1 && <1,
diff --git a/src/Numeric/Probability/Object.hs b/src/Numeric/Probability/Object.hs
--- a/src/Numeric/Probability/Object.hs
+++ b/src/Numeric/Probability/Object.hs
@@ -12,6 +12,8 @@
 and for generating random values according to the distribution.
 The latter one is of course more efficient
 and may be used for approximation of the distribution by simulation.
+
+Maybe a better name is @Experiment@.
 -}
 module Numeric.Probability.Object where
 
diff --git a/src/Numeric/Probability/Percentage.hs b/src/Numeric/Probability/Percentage.hs
--- a/src/Numeric/Probability/Percentage.hs
+++ b/src/Numeric/Probability/Percentage.hs
@@ -9,6 +9,8 @@
 import Numeric.Probability.Show (showR)
 import Numeric.Probability.Trace (Trace)
 
+import Data.List.HT (padLeft, )
+
 import qualified System.Random as Random
 
 
@@ -22,11 +24,18 @@
 
 
 showPfix :: (RealFrac prob, Show prob) => Int -> prob -> String
-showPfix precision f =
+showPfix precision x =
    if precision==0
-     then showR 3 (round (f*100) :: Integer)++"%"
-     else showR (4+precision) (roundRel precision (f*100))++"%"
+     then showR 3 (round (x*100) :: Integer) ++ "%"
+     else
+        let str =
+               padLeft '0' (precision+1)
+                  (show (round (x*10^(precision+2)) :: Integer))
+            (int,frac) =
+               splitAt (length str - precision) str
+        in  padLeft ' ' 3 int ++ '.' : frac ++ "%"
 
+{-# DEPRECATED roundRel "was used to implemented showPfix, but is no longer needed for this purpose, and should not be exported anyway, and does not contribute to a safe way to format fixed point values, because the rounded value may not be accurate" #-}
 roundRel :: (RealFrac a) => Int -> a -> a
 roundRel p x =
    let d = 10^p
@@ -57,6 +66,11 @@
 (//) :: (Ord a, Show a) => Dist a -> Int -> IO ()
 (//) x prec = putStr (Dist.pretty (\(Cons p) -> showPfix prec p) x)
 
+(//*) :: (Ord a, Show a) => Dist a -> (Int,Int) -> IO ()
+(//*) x (prec,width) = putStr $ flip Dist.pretty x $
+   \(Cons p) ->
+      showPfix prec p ++ " " ++
+      replicate (round (p * fromIntegral width)) '*'
 
 
 
diff --git a/src/Numeric/Probability/Visualize.hs b/src/Numeric/Probability/Visualize.hs
--- a/src/Numeric/Probability/Visualize.hs
+++ b/src/Numeric/Probability/Visualize.hs
@@ -238,8 +238,8 @@
 vec :: Show a => [a] -> String
 vec xs0 = "c"++asTuple show xs0
 
-out0 :: String -> String -> IO ()
-out0 f s = writeFile (f) (s++"\n")
+out0 :: FilePath -> String -> IO ()
+out0 f s = writeFile f (s++"\n")
 
-out1 :: String -> String -> IO ()
-out1 f s = appendFile (f) (s++"\n")
+out1 :: FilePath -> String -> IO ()
+out1 f s = appendFile f (s++"\n")
