diff --git a/idris.cabal b/idris.cabal
--- a/idris.cabal
+++ b/idris.cabal
@@ -1,5 +1,5 @@
 Name:           idris
-Version:        0.9.4
+Version:        0.9.4.1
 License:        BSD3
 License-file:   LICENSE
 Author:         Edwin Brady
@@ -45,6 +45,7 @@
                        rts/libtest.c
 Extra-source-files:    lib/Makefile  lib/*.idr lib/prelude/*.idr lib/network/*.idr
                        lib/control/monad/*.idr lib/language/*.idr
+                       lib/base.ipkg
                        tutorial/examples/*.idr
                        rts/*.c rts/*.h rts/Makefile
 
@@ -74,7 +75,7 @@
 
                               IRTS.Lang, IRTS.LParser, IRTS.Bytecode, IRTS.Simplified,
                               IRTS.CodegenC, IRTS.Defunctionalise, IRTS.Inliner,
-                              IRTS.Compiler,
+                              IRTS.Compiler, IRTS.CodegenJava, IRTS.BCImp,
 
                               Paths_idris
 
diff --git a/lib/base.ipkg b/lib/base.ipkg
new file mode 100644
--- /dev/null
+++ b/lib/base.ipkg
@@ -0,0 +1,15 @@
+package base
+
+opts = "--noprelude"
+modules = builtins, prelude, io, system,
+
+          prelude.algebra, prelude.cast, prelude.nat, prelude.fin,
+          prelude.list, prelude.maybe, prelude.monad, prelude.applicative,
+          prelude.either, prelude.vect, prelude.strings, prelude.char,
+          prelude.heap, prelude.complex,
+
+          network.cgi,
+
+          language.reflection,
+
+          control.monad.identity, control.monad.state
diff --git a/rts/libidris_rts.a b/rts/libidris_rts.a
Binary files a/rts/libidris_rts.a and b/rts/libidris_rts.a differ
diff --git a/src/IRTS/BCImp.hs b/src/IRTS/BCImp.hs
new file mode 100644
--- /dev/null
+++ b/src/IRTS/BCImp.hs
@@ -0,0 +1,19 @@
+module IRTS.BCImp where
+
+-- Bytecode for a register/variable based VM (e.g. for generating code in an 
+-- imperative language where we let the language deal with GC)
+
+import IRTS.Lang
+import IRTS.Simplified
+import Core.TT
+
+data Reg = RVal | L Int
+
+data BC = NOP
+
+toBC :: (Name, SDecl) -> (Name, [BC])
+toBC (n, SFun n' args locs exp)
+   = (n, bc RVal exp)
+
+bc :: Reg -> SExp -> [BC]
+bc = undefined
diff --git a/src/IRTS/CodegenJava.hs b/src/IRTS/CodegenJava.hs
new file mode 100644
--- /dev/null
+++ b/src/IRTS/CodegenJava.hs
@@ -0,0 +1,21 @@
+module IRTS.CodegenJava where
+
+import IRTS.BCImp
+import IRTS.Lang
+import IRTS.Simplified
+import Core.TT
+import Paths_idris
+import Util.System
+
+import Data.Char
+import System.Process
+import System.Exit
+import System.IO
+import System.Directory
+import Control.Monad
+
+codegenJava :: [(Name, SDecl)] ->
+               String -> -- output file name
+               IO ()
+codegenJava defs out = putStrLn "Not implemented yet"
+
