diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c)2011, Brent Yorgey
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Brent Yorgey nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/ottparse-pretty.cabal b/ottparse-pretty.cabal
new file mode 100644
--- /dev/null
+++ b/ottparse-pretty.cabal
@@ -0,0 +1,37 @@
+Name:                ottparse-pretty
+Version:             0.1
+Synopsis:            Pretty-printer for Ott parse trees
+Description:         Ott (<http://www.cl.cam.ac.uk/~pes20/ott/>) is a tool for
+		     writing formal definitions of programming
+		     languages and calculi.  Often the Ott grammars
+		     one defines end up being ambiguous, and Ott
+		     signals its displeasure by spewing forth several
+		     massive parse trees in a format requiring
+		     formidable patience to read.  Finding the slight
+		     differences between two such parse trees is an
+		     exercise in seizure-inducing tedium.
+                     .
+		     To the rescue comes ottparse-pretty!  Simply
+		     paste in each parse and it is shown to you in a
+		     nicely formatted tree form with all the extra
+		     meaningless cruft removed.
+License:             BSD3
+License-file:        LICENSE
+Author:              Brent Yorgey
+Maintainer:          byorgey@cis.upenn.edu
+Category:            Text
+Build-type:          Simple
+Cabal-version:       >=1.6
+
+Source-repository head
+  type:     darcs
+  location: http://code.haskell.org/~byorgey/code/ottparse-pretty
+
+Executable ottparse-pretty
+  hs-source-dirs:    src
+  Main-is:           ottparse-pretty.hs
+  Build-depends:     base >= 4.0 && < 4.5,
+                     split >= 0.1 && < 0.2,
+                     parsec >= 3.0 && < 3.2,
+                     containers >= 0.3 && < 0.5,
+                     uniplate >= 1.6 && < 1.7
diff --git a/src/ottparse-pretty.hs b/src/ottparse-pretty.hs
new file mode 100644
--- /dev/null
+++ b/src/ottparse-pretty.hs
@@ -0,0 +1,37 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Main
+-- Copyright   :  (c) Brent Yorgey 2011
+-- License     :  BSD-style (see LICENSE)
+-- Maintainer  :  Brent Yorgey <byorgey@cis.upenn.edu>
+-- Stability   :  experimental
+--
+-- Ott (<http://www.cl.cam.ac.uk/~pes20/ott/>) is a tool for writing
+-- formal definitions of programming languages and calculi.  Often the
+-- Ott grammars one defines end up being ambiguous, and Ott signals --
+its displeasure by spewing forth several massive parse trees in a --
+format requiring formidable patience to read.  Finding the slight --
+differences between two such parse trees is an exercise in --
+seizure-inducing tedium.  -- -- To the rescue comes ottparse-pretty!
+Simply paste in each parse -- and it is shown to you in a nicely
+ formatted tree form with all the -- extra meaningless cruft removed.
+-----------------------------------------------------------------------------
+import Text.Ott.Pretty
+
+import System.IO     (hSetBuffering, BufferMode(..), stdout)
+import Control.Monad (forever)
+import Text.Parsec   (runParser)
+import Data.Tree     (drawTree)
+
+main :: IO ()
+main = do
+  hSetBuffering stdout NoBuffering
+  forever interpTree
+
+interpTree :: IO ()
+interpTree = do
+  putStr "> "
+  tStr <- getLine
+  case runParser parseTree () "" tStr of
+    Left err -> print err
+    Right t -> putStr $ drawTree (normalizeTree t)
