diff --git a/berp.cabal b/berp.cabal
--- a/berp.cabal
+++ b/berp.cabal
@@ -1,5 +1,5 @@
 name:                berp
-version:             0.0.1
+version:             0.0.2
 cabal-version:       >= 1.6
 synopsis:            An implementation of Python 3. 
 description:         Berp is an implementation of Python 3, written in Haskell.
@@ -32,14 +32,14 @@
       base == 4.*,
       monads-tf == 0.1.*,
       transformers == 0.2.*,
-      containers == 0.2.*,
+      containers < 0.4,
       language-python == 0.3.*,
       haskell-src-exts == 1.9.*,
       parseargs == 0.1.*,
       process == 1.0.*,
       filepath == 1.1.*,
       directory == 1.0.*,
-      ghc >= 6.10.4,
+      ghc >= 6.10,
       haskeline == 0.6.*,
       ghc-paths == 0.1.*,
       extensible-exceptions == 0.1.*
@@ -59,18 +59,17 @@
 Library
    ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans
    include-dirs:
-       src/include 
+      src/include 
    hs-source-dirs:
-       src
+      src
    build-depends:
-       base,
-       monads-tf,
-       transformers,
-       containers,
-       ghc-prim,
-       integer,
-       template-haskell,
-       array
+      base == 4.*,
+      monads-tf == 0.1.*,
+      transformers == 0.2.*,
+      containers < 0.4,
+      ghc-prim,
+      template-haskell,
+      array < 0.4
    exposed-modules:
       Berp.Base
       Berp.Base.Hash
diff --git a/src/Berp/Base/Hash.hs b/src/Berp/Base/Hash.hs
--- a/src/Berp/Base/Hash.hs
+++ b/src/Berp/Base/Hash.hs
@@ -18,8 +18,6 @@
 import Berp.Base.Mangle (mangle)
 import Language.Haskell.TH
 import Data.HashTable as HT (hashString)
-import GHC.Integer (hashInteger)
-import GHC.Types (Int (..))
 
 type Hashed a = (Int, a)
 
@@ -30,10 +28,15 @@
    hash = fromIntegral . HT.hashString
 
 instance Hash Integer where
-   hash i = I# (hashInteger i)
+   -- hash i = I# (hashInteger i)
+   hash = hashInteger
 
 hashedStr :: String -> Q Exp
 hashedStr str = [| (n, mangle str) |]
    where
    n :: Int
    n = hash str
+
+-- XXX May need to reconsider this. We'll want something which is fast.
+hashInteger :: Integer -> Int
+hashInteger i = fromInteger (i `mod` (toInteger (maxBound :: Int)))
diff --git a/src/Berp/Base/Unique.hs b/src/Berp/Base/Unique.hs
--- a/src/Berp/Base/Unique.hs
+++ b/src/Berp/Base/Unique.hs
@@ -3,9 +3,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      : Berp.Base
--- Copyright   : (c) 2010 Bernie Pope
--- License     : BSD-style
--- Maintainer  : florbitous@gmail.com
+-- Copyright   : (c) Copyright 2002, The University Court of the University 
+--               of Glasgow.  All rights reserved.  
+-- License     : See the GHC license below. 
+-- Maintainer  : (of this branch) florbitous@gmail.com
 -- Stability   : experimental
 -- Portability : ghc
 --
@@ -13,6 +14,40 @@
 -- Same as the version in GHC but with added show instance.
 --
 -----------------------------------------------------------------------------
+
+{-
+The Glasgow Haskell Compiler License
+
+Copyright 2002, The University Court of the University of Glasgow. 
+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 name of the University nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
+GLASGOW AND THE 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
+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE 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.
+-}
 
 
 module Berp.Base.Unique (
diff --git a/src/Berp/Compile/Compile.hs b/src/Berp/Compile/Compile.hs
--- a/src/Berp/Compile/Compile.hs
+++ b/src/Berp/Compile/Compile.hs
@@ -16,12 +16,13 @@
 module Berp.Compile.Compile (compiler, Compilable (..)) where
 
 import Prelude hiding (read, init, mapM, putStrLn)
+import Language.Python.Common.PrettyAST ()
+import Language.Python.Common.Pretty (prettyText)
 import Language.Python.Common.AST as Py
 import Data.Traversable
 import Data.Foldable (foldrM)
 import Language.Haskell.Exts.Syntax as Hask
 import Language.Haskell.Exts.Build
--- import Language.Haskell.Exts.Pretty
 import Control.Applicative
 import qualified Data.Set as Set
 import Data.Set ((\\))
@@ -209,7 +210,7 @@
                  return (stmts1 ++ stmts2 ++ [newStmt])
    compile (Break {}) = returnStmt Prim.break
    compile (Continue {}) = returnStmt Prim.continue
-   compile other = error $ "compile on " ++ show other ++ " unsupported"
+   compile other = unsupported $ prettyText other
 
 docString :: SuiteSpan -> Exp
 docString (StmtExpr { stmt_expr = Strings { strings_strings = ss }} : _)
@@ -301,7 +302,7 @@
       return (stmts, newExpr)
    compile (Py.Paren { paren_expr = e }) = compile e
    compile (None {}) = returnExp Prim.none
-   compile other = unsupported $ "compile: " ++ show other
+   compile other = unsupported $ prettyText other 
 
 compileTailCall :: ExprSpan -> Compile ([Stmt], Exp)
 compileTailCall (Call { call_fun = fun, call_args = args }) = do
@@ -315,7 +316,7 @@
 instance Compilable ArgumentSpan where
    type (CompileResult ArgumentSpan) = ([Stmt], Exp)
    compile (ArgExpr { arg_expr = expr }) = compileExprObject expr
-   compile other = unsupported $ show other
+   compile other = unsupported $ prettyText other
 
 newtype Block = Block [StatementSpan]
 newtype TopBlock = TopBlock [StatementSpan]
@@ -405,7 +406,7 @@
    (exprStmts, compiledExp) <- compileExprObject expr
    let newStmt = qualStmt $ infixApp (identToMangledVar ident) Prim.assignOp compiledExp
    return (exprStmts ++ [newStmt])
-compileAssign e1 e2 = unsupported $ "assignment for " ++ show e1 ++ " and " ++ show e2 
+compileAssign e1 e2 = unsupported $ unwords [prettyText e1, "=", prettyText e2]
 
 compileUnaryOp :: Py.OpSpan -> Hask.Exp
 compileUnaryOp (Plus {}) = Prim.unaryPlus
diff --git a/src/Berp/Interpreter/Input.hs b/src/Berp/Interpreter/Input.hs
--- a/src/Berp/Interpreter/Input.hs
+++ b/src/Berp/Interpreter/Input.hs
@@ -12,6 +12,11 @@
 -- Prompt for and read input lines. Handle input continuations for multi-line
 -- statemtents. 
 --
+-- Generally speaking this module is a pile of ugly hacks which approximate
+-- what is supposed to happen. The need for hacks occurs because the lexer
+-- isn't really cut out for what we want to do. At some point we'll need
+-- to fix the lexer.
+--
 -----------------------------------------------------------------------------
 
 module Berp.Interpreter.Input (getInputLines) where
@@ -35,9 +40,10 @@
    case maybeInput of
       Nothing -> return Nothing
       Just line
-         | null line -> return $ Just [] 
+         | Right (tokens, _state) <- lexResult,
+           null $ noComments tokens -> return $ Just []
          | Right (tokens, state) <- lexResult,
-           lastTokenIsColon tokens -> do
+           lastTokenIsColon $ noComments tokens -> do
              restLines <- getIndentContinueLines state []
              return $ Just $ unlines (line:restLines)
          | Right (_tokens, state) <- lexResult,
@@ -47,7 +53,12 @@
          | otherwise -> return $ Just line
          where
          lexResult = runParser lexer $ lexState line
+         noComments = filter (not . isComment) 
 
+isComment :: Token -> Bool
+isComment (CommentToken {}) = True
+isComment _other = False
+
 lastTokenIsColon :: [Token] -> Bool
 lastTokenIsColon [] = False
 lastTokenIsColon tokens = 
@@ -58,7 +69,7 @@
    isColon _other = False
 
 nonEmptyParenStack :: ParseState -> Bool
-nonEmptyParenStack state = not $ null $ parenStack state
+nonEmptyParenStack = not . null . parenStack
 
 getIndentContinueLines :: ParseState -> [String] -> Repl [String]
 getIndentContinueLines state acc = do
