diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,12 @@
+0.0.1.1
+-------
+
+- added simple demo
+- renamed statistic TaskCount to Count
+- fixed nondescript error message on empty input
+- relaxed version bounds on dependencies
+
+0.0.1.0
+-------
+
+- initial version
diff --git a/Driver.hs b/Driver.hs
--- a/Driver.hs
+++ b/Driver.hs
@@ -86,6 +86,7 @@
         istate = Engine.init responses
         engine = setupEngine args in do
     printStats resp responses
+    when (length resp > 0) $ do
     maybeWriteFile oResponses (formatResp oRespFormat responses)
     putStrLn "Reading initial task parameters..."
     istate <- maybe return readParams iTaskParams $ istate
@@ -96,7 +97,7 @@
     thetas results `seq` params results `seq` return ()
     putStrLn "Calculating bayes probabilities..."
     let (bayesBounds, bayesValues) = calcBayes results in do
-    putStrLn "Writing bayes probability values..."
+    putStrLn "Saving bayes probability values..."
     maybeWriteFile oBayesPlot . buildTable $ bayesValues
     putStrLn "Writing task parameters..."
     let taskBase = tableTaskParams . getTaskParamsList $ results in do
diff --git a/Engine.hs b/Engine.hs
--- a/Engine.hs
+++ b/Engine.hs
@@ -35,7 +35,7 @@
   where
     [dt] = diff (thetas old) (thetas new)
     dp = diff (params old) (params new)
-    diff xs ys = (max' . trans . sub xs) ys
+    diff xs ys = (max' . trans) (sub xs ys)
       where
         max' :: [[Double]] -> [Double]
         max' = map (maximum . map abs)
diff --git a/Statistics.hs b/Statistics.hs
--- a/Statistics.hs
+++ b/Statistics.hs
@@ -20,7 +20,7 @@
 import System.Random.MWC
 
 statTheta :: StatisticType -> ContestantsData -> IO Statistic
-statTheta TaskCount xs = return . SingleStatistic . map (fromIntegral . V.length . snd) $ xs
+statTheta Count xs = return . SingleStatistic . map (fromIntegral . V.length . snd) $ xs
 statTheta SolvedProp xs = return . SingleStatistic . map (prop . snd) $ xs
   where
     prop = mean . V.map (ok . snd)
@@ -75,7 +75,7 @@
 
 
 statTask :: StatisticType -> TasksData -> IO Statistic
-statTask TaskCount xs = return . SingleStatistic . map (fromIntegral . V.length . snd) $ xs
+statTask Count xs = return . SingleStatistic . map (fromIntegral . V.length . snd) $ xs
 statTask SolvedProp xs = return . SingleStatistic . map (prop . snd) $ xs
   where
     prop = mean . V.map (ok . snd)
diff --git a/Types.hs b/Types.hs
--- a/Types.hs
+++ b/Types.hs
@@ -69,7 +69,7 @@
 type TaskParams = UV.Vector TaskParam
 type Thetas = UV.Vector Theta
 
-data StatisticType = TaskCount | SolvedProp | LogLikelihood
+data StatisticType = Count | SolvedProp | LogLikelihood
                    | DLogLikelihood | FisherSEM | Bootstrap
     deriving (Eq, Show, Data, Typeable)
 
diff --git a/demo.sh b/demo.sh
new file mode 100644
--- /dev/null
+++ b/demo.sh
@@ -0,0 +1,85 @@
+#!/bin/sh -v
+
+function find_exe() {
+    HIRT=
+    [ -z "$HIRT" ] && type hirt 2>/dev/null && HIRT=hirt
+    [ -z "$HIRT" ] && [ -x hirt ] && HIRT=./hirt
+    [ -z "$HIRT" ] && [ -x dist/build/hirt/hirt ] && HIRT=dist/build/hirt/hirt
+}
+
+find_exe
+
+if [ -z "$HIRT" ]; then
+    echo "Could not find executable..."
+    echo "Perhaps build it with:"
+    echo "	cabal configure && cabal build"
+    echo " or   cabal install hirt"
+    exit 1
+fi >&2
+
+
+# a very simple sample
+RESPONSES=/tmp/responses
+TASKPARAM=/tmp/params
+BAYES=/tmp/bayes
+
+cat > "$RESPONSES" << EOF
+contestant task result
+c1 t1 0
+c1 t2 0
+c2 t1 0
+c2 t2 1
+c3 t2 1
+c3 t1 1
+EOF
+
+# fit model with default options
+"$HIRT" "$RESPONSES"
+
+# the differences in loglikehood on this very small example are tiny,
+# throwing off the JML estimate, let's try BFGS
+
+"$HIRT" "$RESPONSES" --algo lbfgsb
+
+# Better, but not quite there yet.
+# We will increase the precision.
+
+"$HIRT" "$RESPONSES" --algo lbfgsb --prec 1e-30
+
+# Let's save task parameters for later use
+# and show contestant ability estimates.
+
+"$HIRT" "$RESPONSES" --algo lbfgsb --prec 1e-30 --otaskparam "$TASKPARAM" --otheta /dev/stdout
+
+# Now, let's use the task parameter estimates
+# to estimate contestant abilities.
+# We will use one round of JML to leave task parameters fixed.
+
+"$HIRT" "$RESPONSES" --algo jml -n 1 --itaskparam "$TASKPARAM" --otheta /dev/stdout
+
+# Now we will show some statistics
+
+"$HIRT" "$RESPONSES" --algo lbfgsb --prec 1e-30 --otaskparam /dev/stdout --otheta /dev/stdout \
+    --taskstats count --taskstats solvedprop --taskstats loglikelihood --taskstats dloglikelihood \
+    --thetastats count --thetastats solvedprop --thetastats loglikelihood --thetastats dloglikelihood \
+    --thetastats fishersem --thetastats bootstrap
+
+# Finally, we will plot a graph of the bayes expected a posteriori probability
+
+"$HIRT" "$RESPONSES" --algo lbfgsb --prec 1e-30 --otaskparam /dev/stdout --otheta /dev/stdout \
+    --obayesplot /tmp/bayes
+
+cat > /tmp/plot.R << EOF
+library(ggplot2)
+
+x <- read.table(file="$BAYES", header=T)
+p <- ggplot(data=x, aes(x=x, y=p, color=contestant)) +
+     geom_line(size=1) +
+     scale_color_brewer(palette="Set1",name="") +
+     scale_x_continuous(expression(theta)) +
+     scale_y_continuous("y")
+
+ggsave(file="/tmp/plot.pdf", w=10, h=7, plot=p)
+EOF
+
+Rscript /tmp/plot.R
diff --git a/hirt.cabal b/hirt.cabal
--- a/hirt.cabal
+++ b/hirt.cabal
@@ -1,5 +1,5 @@
 Name:                hirt
-Version:             0.0.1.0
+Version:             0.0.1.1
 Synopsis:            Calculates IRT 2PL and 3PL models
 Description:
      Program for fitting Item Response Theory (IRT) two (2PL) and
@@ -30,12 +30,15 @@
 Build-type:          Simple
 Cabal-version:       >=1.6
 
+Extra-source-files:
+    ChangeLog.md
+    demo.sh
+
 Flag PL3
     Description: Compile for 3PL model, doesn't support JML yet.
                  Model needs to be selected at compile time.
     Default: False
 
--- Extra-source-files:
 
 Executable hirt
      Main-is: Main.hs
@@ -45,12 +48,12 @@
 
      Build-depends: base >= 4 && < 5,
                     vector >= 0.9 && < 0.10,
-                    containers >= 0.4 && < 0.5,
+                    containers >= 0.4 && < 0.6,
                     text >= 0.11.1.13 && < 0.12,
                     attoparsec >= 0.10.1 && < 0.11,
                     text-format >= 0.3.0.7 && < 0.4,
                     csv >= 0.1.2 && < 0.2,
-                    hmatrix >= 0.13.1.0 && < 0.14,
+                    hmatrix >= 0.13.1.0 && < 0.15,
                     numeric-extras >= 0.0.2.2 && < 0.1,
                     cmdargs >= 0.9.3 && < 0.10,
                     random >= 1.0.1.1 && < 1.1,
