diff --git a/BUCK b/BUCK
index a8a7a37..a82bf42 100644
--- a/BUCK
+++ b/BUCK
@@ -3,7 +3,6 @@
 
 REPL = [
   SRC + 'builtin/PRED_$write_toString_2.java',
-  SRC + 'lang/PrologMain.java',
 ]
 
 IO = [
@@ -101,13 +100,13 @@
 
 java_binary(
   name = 'cafeteria',
-  main_class = 'com.googlecode.prolog_cafe.lang.PrologMain',
+  main_class = 'com.googlecode.prolog_cafe.repl.PrologMain',
   deps = [':cafeteria_lib'],
 )
 
 java_library(
   name = 'cafeteria_lib',
-  srcs = REPL + [':cafeteria_srcs'],
+  srcs = glob([SRC + 'repl/*.java']) + REPL + [':cafeteria_srcs'],
   deps = [
     ':builtin',
     ':io',
@@ -149,7 +148,9 @@
 
 java_sources(
   name = 'cafeteria_src',
-  srcs = REPL + ['src/builtin/cafeteria.pl'],
+  srcs = glob([SRC + 'repl/*.java']) + REPL + [
+    'src/builtin/cafeteria.pl',
+  ],
 )
 
 maven_package(
diff --git a/src/lang/BlockingPrologControl.java b/src/repl/BlockingPrologControl.java
similarity index 96%
rename from src/lang/BlockingPrologControl.java
rename to src/repl/BlockingPrologControl.java
index 907997d..c8927c8 100644
--- a/src/lang/BlockingPrologControl.java
+++ b/src/repl/BlockingPrologControl.java
@@ -1,4 +1,10 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.repl;
+
+import com.googlecode.prolog_cafe.lang.HashtableOfTerm;
+import com.googlecode.prolog_cafe.lang.Predicate;
+import com.googlecode.prolog_cafe.lang.PrologControl;
+import com.googlecode.prolog_cafe.lang.PrologException;
+import com.googlecode.prolog_cafe.lang.Term;
 
 /**
  * Prolog thread.<br>
@@ -110,11 +116,12 @@
 
   /** Constructs a new <code>BlockingPrologControl</code>. */
   public BlockingPrologControl() {
+    engine.init();
   }
 
-  /** Constructs a new <code>BlockingPrologControl</code>. */
-  public BlockingPrologControl(PrologMachineCopy pmc) {
-    super(pmc);
+  /** Returns the stream manager. */
+  HashtableOfTerm getStreamManager() {
+    return engine.getStreamManager();
   }
 
   /**
@@ -368,8 +375,6 @@
   public void run() {
     try {
       executePredicate();
-  } catch (JavaInterruptedException e) {
-     System.exit(1);
   } catch (PrologException e){
       System.out.println(e.toString());
   } catch (Exception e){
diff --git a/src/lang/PrologMain.java b/src/repl/PrologMain.java
similarity index 88%
rename from src/lang/PrologMain.java
rename to src/repl/PrologMain.java
index 956248e..c0d16f6 100644
--- a/src/lang/PrologMain.java
+++ b/src/repl/PrologMain.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.repl;
+import com.googlecode.prolog_cafe.lang.HaltException;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.ListTerm;
+import com.googlecode.prolog_cafe.lang.Prolog;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.InputStreamReader;
@@ -55,17 +63,16 @@
 	    }
 
 	    p = new BlockingPrologControl();
-	    p.engine.init();
-		p.engine.getStreamManager().put(
+		p.getStreamManager().put(
 			SymbolTerm.intern("user_input"),
 			new JavaObjectTerm(new PushbackReader(new BufferedReader(
 				new InputStreamReader(System.in)),
 				Prolog.PUSHBACK_SIZE)));
-		p.engine.getStreamManager().put(
+		p.getStreamManager().put(
 			SymbolTerm.intern("user_output"),
 			new JavaObjectTerm(new PrintWriter(new BufferedWriter(
 				new OutputStreamWriter(System.out)), true)));
-		p.engine.getStreamManager().put(
+		p.getStreamManager().put(
 			SymbolTerm.intern("user_error"),
 			new JavaObjectTerm(new PrintWriter(new BufferedWriter(
 				new OutputStreamWriter(System.err)), true)));
