diff --git a/Colada/WordClass.hs b/Colada/WordClass.hs
--- a/Colada/WordClass.hs
+++ b/Colada/WordClass.hs
@@ -122,6 +122,7 @@
 import qualified Colada.Features as F
 import qualified NLP.Symbols     as Symbols
 
+import Debug.Trace
 
 -- | Container for the Word Class model
 data WordClass = 
@@ -173,7 +174,9 @@
 -- | @learn options xs@ runs the LDA Gibbs sampler for word classes
 -- with @options@ on sentences @xs@, and returns the resulting model
 -- together progressive class the assignments
-learn :: Options -> [CoNLL.Sentence] -> (WordClass, [V.Vector LDA.D])
+learn :: Options 
+         -> [CoNLL.Sentence] 
+         -> (WordClass, [V.Vector (U.Vector Double)])
 learn opts xs = 
   let ((sbs_init, sbs_rest), atomTabD, atomTabW) = 
         Symbols.runSymbols prepare Symbols.empty Symbols.empty
@@ -188,8 +191,7 @@
                                    (get featIds opts) 
                 xs_rest
         return (ini, rest)
-      best = V.map U.maxIndex
-      sampler :: WriterT [V.Vector LDA.D] (LST.ST s) LDA.Finalized
+      sampler :: WriterT [V.Vector (U.Vector Double)] (LST.ST s) LDA.Finalized
       sampler = do         
         m <- st $ LDA.initial (U.singleton (get seed opts)) 
                          (get topicNum opts)
@@ -204,7 +206,7 @@
                 let b = V.head z  
                 Fold.forM_ b $ \s -> do    
                   ls <- st $ V.mapM (interpWordClasses m (get lambda opts)) s
-                  tell [best ls]
+                  tell [ls]
               return $! r
         -- Initialize with batch sampler on prefix sbs_init     
         Fold.forM_ sbs_init $ \sb -> do 
@@ -307,8 +309,12 @@
 interpWordClasses m lambda doc@(d,_) = do  
   pzd  <- normalize <$> LDA.priorDocTopicWeights_ m d
   pzdw <- normalize <$> LDA.docTopicWeights_ m doc
-  return $! U.zipWith (\p q -> lambda * p + (1-lambda) * q) pzd pzdw
-  where normalize x = let !s = U.sum x in U.map (/s) x
+  return $! normalize $ U.zipWith (\p q -> lambda * p + (1-lambda) * q) pzd pzdw
+  where normalize x = 
+          let uniform = U.replicate (U.length x) (1 / (fromIntegral (U.length x)))
+          in case U.sum x of
+            0 -> uniform
+            s -> U.map (/s) x
         
 -- | @wordTypeClasses m@ returns a Map from word types to unnormalized
 -- distributions over word classes
diff --git a/colada.cabal b/colada.cabal
--- a/colada.cabal
+++ b/colada.cabal
@@ -1,5 +1,5 @@
 Name:                colada
-Version:             0.4.3
+Version:             0.5.1
 Synopsis:            Colada implements incremental word class class induction 
                      using online LDA
 Description:  Colada implements incremental word class class induction using 
diff --git a/colada.hs b/colada.hs
--- a/colada.hs
+++ b/colada.hs
@@ -4,25 +4,28 @@
  #-}
 module Main
 where       
-import qualified Data.Text.Lazy.IO as Text
-import qualified Data.Text.Lazy as Text
-import qualified Data.Text.Lazy.Builder as Text
+import qualified Data.Text.Lazy.IO          as Text
+import qualified Data.Text.Lazy             as Text
+import qualified Data.Text.Lazy.Builder     as Text
 import qualified Data.Text.Lazy.Builder.Int as Text
-import qualified Data.ByteString as BS
-import qualified Data.Serialize as Serialize
-import qualified Data.List as List
-import qualified Data.Vector.Generic as V
+import qualified Data.ByteString            as BS
+import qualified Data.Serialize             as Serialize
+import qualified Data.List                  as List
+import qualified Data.Vector.Generic        as V
+import qualified Data.Vector.Unboxed        as U
+import qualified System.Environment         as Env
+import qualified Data.Label                 as L
+import qualified Data.Label.Maybe           as M
+import qualified NLP.CoNLL                  as CoNLL
+import qualified Colada.WordClass           as C
+import qualified Text.Printf                as Printf
 
-import qualified System.Environment as Env
 import System.Console.CmdArgs.Explicit
-import qualified Data.Label as L
-import qualified Data.Label.Maybe as M
 import Prelude hiding ((.))
 import Control.Category ((.))
 
-import qualified NLP.CoNLL as CoNLL
-import qualified Colada.WordClass as C
 
+
 -- Command line parsing
 
 data Program = Help 
@@ -172,7 +175,7 @@
       ss <- CoNLL.parse `fmap` Text.getContents
       let (m, ls) = C.learn o ss
       if (L.get C.progressive o)     
-        then do Text.putStr . Text.unlines . map formatLabeling $ ls
+        then do Text.putStr . Text.unlines . map formatFullLabeling $ ls
         else do Text.putStr . C.summary $ m    
       BS.writeFile p . Serialize.encode $ m      
     Summary { _modelPath = p , _harden = h } -> do  
@@ -185,6 +188,14 @@
      v Int -> Text.Text
 formatLabeling = Text.unlines . V.toList 
                  . V.map (Text.toLazyText . Text.decimal)
+
+
+formatFullLabeling = 
+    Text.unlines 
+  . map (Text.unwords . map (Text.pack . Printf.printf "%.3f") . U.toList)
+  . V.toList
+  
+  
 
 parseModel :: FilePath -> IO C.WordClass
 parseModel p = do
