diff --git a/BUCK b/BUCK
index f170833..03a0c9a 100644
--- a/BUCK
+++ b/BUCK
@@ -1,5 +1,18 @@
 SRC = 'java/com/googlecode/prolog_cafe/'
 
+REPL = [
+  SRC + 'builtin/PRED_$write_toString_2.java',
+  SRC + 'lang/PrologMain.java',
+]
+
+IO = [
+  SRC + 'builtin/PRED_close_2.java',
+  SRC + 'builtin/PRED_flush_output_1.java',
+  SRC + 'builtin/PRED_open_4.java',
+  SRC + 'builtin/PRED_read_line_2.java',
+  SRC + 'builtin/PRED_tab_2.java',
+]
+
 genrule(
   name = 'all',
   cmd = ':>all',
@@ -21,15 +34,12 @@
 
 java_library(
   name = 'lang',
-  srcs = glob(
-    [SRC + 'lang/*.java'],
-    excludes = [SRC + 'lang/PrologMain.java'],
-  ),
+  srcs = glob([SRC + 'lang/*.java'], excludes = REPL),
 )
 
 java_library(
   name = 'builtin',
-  srcs = glob([SRC + 'builtin/*.java']) + [
+  srcs = glob([SRC + 'builtin/*.java'], excludes = REPL + IO) + [
     ':builtin_srcs',
     ':system_srcs',
   ],
@@ -49,6 +59,21 @@
 )
 
 java_library(
+  name = 'io',
+  srcs = IO + [':io_srcs'],
+  deps = [
+    ':builtin',
+    ':lang',
+  ],
+)
+
+pl2j(
+  name = 'io_srcs',
+  src = 'src/builtin/io.pl',
+  out = 'io.src.zip',
+)
+
+java_library(
   name = 'compiler',
   srcs = glob([SRC + 'compiler/**/*.java']) + [
     ':pl2am_srcs',
@@ -56,6 +81,7 @@
   ],
   deps = [
     ':builtin',
+    ':io',
     ':lang',
   ],
 )
@@ -80,12 +106,10 @@
 
 java_library(
   name = 'cafeteria_lib',
-  srcs = [
-    SRC + 'lang/PrologMain.java',
-    ':cafeteria_srcs',
-  ],
+  srcs = REPL + [':cafeteria_srcs'],
   deps = [
     ':builtin',
+    ':io',
     ':lang',
   ],
 )
diff --git a/src/builtin/PRED_$fast_write_1.java b/src/builtin/PRED_$fast_write_1.java
deleted file mode 100644
index d64aafa..0000000
--- a/src/builtin/PRED_$fast_write_1.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import  com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>'$fast_write'/1</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
- */
-public class PRED_$fast_write_1 extends Predicate.P1 {
-    public PRED_$fast_write_1(Term a1, Operation cont) {
-	arg1 = a1;
-	this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-	Term a1;
-	a1 = arg1.dereference();
-	engine.getCurrentOutput().print(a1.toString());
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_$fast_writeq_1.java b/src/builtin/PRED_$fast_writeq_1.java
deleted file mode 100644
index 8a47802..0000000
--- a/src/builtin/PRED_$fast_writeq_1.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import  com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>'$fast_writeq'/1</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
- */
-public class PRED_$fast_writeq_1 extends Predicate.P1 {
-    public PRED_$fast_writeq_1(Term a1, Operation cont) {
-	arg1 = a1;
-	this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-	Term a1;
-	a1 = arg1.dereference();
-	engine.getCurrentOutput().print(a1.toQuotedString());
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_$get_prolog_impl_flag_2.java b/src/builtin/PRED_$get_prolog_impl_flag_2.java
index f8306f2..8b314e9 100644
--- a/src/builtin/PRED_$get_prolog_impl_flag_2.java
+++ b/src/builtin/PRED_$get_prolog_impl_flag_2.java
@@ -18,7 +18,6 @@
     private static final SymbolTerm MAX_ARITY                 = SymbolTerm.intern("max_arity");
     private static final SymbolTerm UNKNOWN                   = SymbolTerm.intern("unknown");
     private static final SymbolTerm DOUBLE_QUOTES             = SymbolTerm.intern("double_quotes");
-    private static final SymbolTerm PRINT_STACK_TRACE         = SymbolTerm.intern("print_stack_trace");
 
     public PRED_$get_prolog_impl_flag_2(Term a1, Term a2, Operation cont) {
         arg1 = a1;
@@ -66,9 +65,6 @@
 	} else if (a1.equals(DOUBLE_QUOTES)) {
 	    if (! a2.unify(SymbolTerm.intern(engine.getDoubleQuotes()), engine.trail))
 		return engine.fail();
-	} else if (a1.equals(PRINT_STACK_TRACE)) {
-	    if (! a2.unify(SymbolTerm.intern(engine.getPrintStackTrace()), engine.trail))
-		return engine.fail();
 	} else {
 	    return engine.fail();
 	}
diff --git a/src/builtin/PRED_$get_stream_manager_1.java b/src/builtin/PRED_$get_stream_manager_1.java
deleted file mode 100644
index 5628b34..0000000
--- a/src/builtin/PRED_$get_stream_manager_1.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-/**
-   <code>'$get_stream_manager'/1</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-class PRED_$get_stream_manager_1 extends Predicate.P1 {
-    public PRED_$get_stream_manager_1(Term a1, Operation cont) {
-        arg1 = a1;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1;
-        a1 = arg1;
-
-	a1 = a1.dereference();
-	if (! a1.isVariable())
-	    throw new IllegalTypeException(this, 1, "variable", a1);
-	if (! a1.unify(new JavaObjectTerm(engine.getStreamManager()), engine.trail))
-	    return engine.fail();
-        return cont;
-    }
-}
diff --git a/src/builtin/PRED_$print_stack_trace_1.java b/src/builtin/PRED_$print_stack_trace_1.java
deleted file mode 100644
index d91a16e..0000000
--- a/src/builtin/PRED_$print_stack_trace_1.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>'$print_stack_trace'/1</code>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
-*/
-class PRED_$print_stack_trace_1 extends Predicate.P1 {
-    public PRED_$print_stack_trace_1(Term a1, Operation cont) {
-        arg1 = a1;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1;
-        a1 = arg1;
-
-	a1 = a1.dereference();
-	if (a1.isVariable())
-	    throw new PInstantiationException(this, 1);
-	if (! a1.isJavaObject())
-	    throw new IllegalTypeException(this, 1, "java", a1);
-	Object obj = ((JavaObjectTerm) a1).object();
-	if (obj instanceof InterruptedException)
-	    throw new JavaInterruptedException((InterruptedException) obj);
-	if (engine.getPrintStackTrace().equals("on"))
-	    engine.control.printStackTrace((Throwable) obj);
-        return cont;
-    }
-}
diff --git a/src/builtin/PRED_$set_prolog_impl_flag_2.java b/src/builtin/PRED_$set_prolog_impl_flag_2.java
index b7994b1..222f656 100644
--- a/src/builtin/PRED_$set_prolog_impl_flag_2.java
+++ b/src/builtin/PRED_$set_prolog_impl_flag_2.java
@@ -11,7 +11,6 @@
     private static final SymbolTerm DEBUG             = SymbolTerm.intern("debug");
     private static final SymbolTerm UNKNOWN           = SymbolTerm.intern("unknown");
     private static final SymbolTerm DOUBLE_QUOTES     = SymbolTerm.intern("double_quotes");
-    private static final SymbolTerm PRINT_STACK_TRACE = SymbolTerm.intern("print_stack_trace");
 
     public PRED_$set_prolog_impl_flag_2(Term a1, Term a2, Operation cont) {
         arg1 = a1;
@@ -43,10 +42,6 @@
 	    if (! a2.isSymbol())
 		return engine.fail();
 	    engine.setDoubleQuotes(((SymbolTerm)a2).name());
-	} else if (a1.equals(PRINT_STACK_TRACE)) {
-	    if (! a2.isSymbol())
-		return engine.fail();
-	    engine.setPrintStackTrace(((SymbolTerm)a2).name());
 	} else {
 	    return engine.fail();
 	}
diff --git a/src/builtin/PRED_close_2.java b/src/builtin/PRED_close_2.java
index 9d9ddbb..855d9e3 100644
--- a/src/builtin/PRED_close_2.java
+++ b/src/builtin/PRED_close_2.java
@@ -1,6 +1,23 @@
 package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.PushbackReader;
+
+import com.googlecode.prolog_cafe.lang.ExistenceException;
+import com.googlecode.prolog_cafe.lang.HashtableOfTerm;
+import com.googlecode.prolog_cafe.lang.IllegalDomainException;
+import com.googlecode.prolog_cafe.lang.IllegalTypeException;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.ListTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.PInstantiationException;
+import com.googlecode.prolog_cafe.lang.Predicate;
+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.SystemException;
+import com.googlecode.prolog_cafe.lang.Term;
+import com.googlecode.prolog_cafe.lang.TermException;
 /**
  * <code>close/2</code><br>
  * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
@@ -74,10 +91,6 @@
 	}
 	if (stream instanceof PushbackReader) {
 	    PushbackReader in = (PushbackReader) stream;
-	    if (in.equals(engine.getUserInput()))
-		return cont;
-	    if (in.equals(engine.getCurrentInput()))
-		engine.setCurrentInput(engine.getUserInput());
 	    try {
 		in.close();
 	    } catch (IOException e) {
@@ -90,10 +103,6 @@
 		    throw new SystemException("output stream error");
 	    }
 	    out.flush();
-	    if (out.equals(engine.getUserOutput()) || out.equals(engine.getUserError()))
-		return cont;
-	    if (out.equals(engine.getCurrentOutput()))
-		engine.setCurrentOutput(engine.getUserOutput());
 	    out.close();
 	} else {
 	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
diff --git a/src/builtin/PRED_current_input_1.java b/src/builtin/PRED_current_input_1.java
deleted file mode 100644
index fc4a0b9..0000000
--- a/src/builtin/PRED_current_input_1.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import  com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>current_input/1</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
- */
-public class PRED_current_input_1 extends Predicate.P1 {
-    public PRED_current_input_1(Term a1, Operation cont) {
-	arg1 = a1;
-	this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.requireFeature(Prolog.Feature.IO, this, arg1);
-        engine.setB0();
-	Term a1;
-	a1 = arg1;
-	a1 = a1.dereference();
-	if (a1.isVariable()) {
-	    ((VariableTerm)a1).bind(new JavaObjectTerm(engine.getCurrentInput()), engine.trail);
-	} else if (a1.isJavaObject()) {
-	    if (! a1.unify(new JavaObjectTerm(engine.getCurrentInput()), engine.trail)) 
-		return engine.fail();
-	} else {
-	    throw new IllegalDomainException(this,1,"stream",a1);
-	}
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_current_output_1.java b/src/builtin/PRED_current_output_1.java
deleted file mode 100644
index 4638118..0000000
--- a/src/builtin/PRED_current_output_1.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import  com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>current_output/1</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
- */
-public class PRED_current_output_1 extends Predicate.P1 {
-    public PRED_current_output_1(Term a1, Operation cont) {
-	arg1 = a1;
-	this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.requireFeature(Prolog.Feature.IO, this, arg1);
-        engine.setB0();
-	Term a1;
-	a1 = arg1;
-	a1 = a1.dereference();
-	if (a1.isVariable()) {
-	    ((VariableTerm)a1).bind(new JavaObjectTerm(engine.getCurrentOutput()), engine.trail);
-	} else if (a1.isJavaObject()) {
-	    if (! a1.unify(new JavaObjectTerm(engine.getCurrentOutput()), engine.trail)) 
-		return engine.fail();
-	} else {
-	    throw new IllegalDomainException(this,1,"stream",a1);
-	}
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_get_byte_2.java b/src/builtin/PRED_get_byte_2.java
deleted file mode 100644
index eab2506..0000000
--- a/src/builtin/PRED_get_byte_2.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
- * <code>get_byte/2</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.1
- * @since 1.1
-*/
-public class PRED_get_byte_2 extends Predicate.P2 {
-    private static final IntegerTerm INT_EOF = new IntegerTerm(-1);
-
-    public PRED_get_byte_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	Object stream = null;
-
-	// InByte
-	a2 = a2.dereference(); 
-	if (! a2.isVariable()) {
-	    if (! a2.isInteger())
-		throw new IllegalTypeException(this, 2, "in_byte", a2);
-	    int n = ((IntegerTerm)a2).intValue();
-	    if (n != -1 && (n < 0 || n > 255))
-		throw new RepresentationException(this, 2, "in_byte");
-	}
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// read single byte
-	try {
-	    int c = ((PushbackReader)stream).read();
-	    if (c < 0) { // EOF
-		if (! a2.unify(INT_EOF, engine.trail))
-		    return engine.fail();
-		return cont;
-	    } 
-	    if (c > 255)
-		throw new RepresentationException(this, 0, "byte");
-	    if (! a2.unify(new IntegerTerm(c), engine.trail))
-		return engine.fail();
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/PRED_get_code_2.java b/src/builtin/PRED_get_code_2.java
deleted file mode 100644
index da9f515..0000000
--- a/src/builtin/PRED_get_code_2.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
- * <code>get_code/2</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
-*/
-public class PRED_get_code_2 extends Predicate.P2 {
-    private static final IntegerTerm INT_EOF = new IntegerTerm(-1);
-
-    public PRED_get_code_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	Object stream = null;
-
-	// Char
-	a2 = a2.dereference(); 
-	if (! a2.isVariable()) {
-	    if (! a2.isInteger())
-		throw new IllegalTypeException(this, 2, "integer", a2);
-	    int n = ((IntegerTerm)a2).intValue();
-	    if (n != -1 && ! Character.isDefined(n))
-		throw new RepresentationException(this, 2, "in_character_code");
-	}
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// read single character
-	try {
-	    int c = ((PushbackReader)stream).read();
-	    if (c < 0) { // EOF
-		if (! a2.unify(INT_EOF, engine.trail))
-		    return engine.fail();
-		return cont;
-	    } 
-	    if (! Character.isDefined(c))
-		throw new RepresentationException(this, 0, "character");
-	    if (! a2.unify(new IntegerTerm(c), engine.trail))
-		return engine.fail();
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/PRED_nl_0.java b/src/builtin/PRED_nl_0.java
deleted file mode 100644
index 5d58fd8..0000000
--- a/src/builtin/PRED_nl_0.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import  com.googlecode.prolog_cafe.lang.*;
-/**
- * <code>nl/0</code><br>
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @version 1.0
- */
-public class PRED_nl_0 extends Predicate {
-
-    public PRED_nl_0(Operation cont) {
-	this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-	engine.getCurrentOutput().println();
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_peek_byte_2.java b/src/builtin/PRED_peek_byte_2.java
deleted file mode 100644
index b8fcde6..0000000
--- a/src/builtin/PRED_peek_byte_2.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
-   <code>peek_byte/2</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.1
-   @since 1.1
-*/
-public class PRED_peek_byte_2 extends Predicate.P2 {
-    private static final IntegerTerm INT_EOF = new IntegerTerm(-1);
-
-    public PRED_peek_byte_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	Object stream = null;
-
-	// InByte
-	a2 = a2.dereference(); 
-	if (! a2.isVariable()) {
-	    if (! a2.isInteger())
-		throw new IllegalTypeException(this, 2, "in_byte", a2);
-	    int n = ((IntegerTerm)a2).intValue();
-	    if (n != -1 && (n < 0 || n > 255))
-		throw new RepresentationException(this, 2, "in_byte");
-	}
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// read single byte
-	try {
-	    int c = ((PushbackReader)stream).read();
-	    if (c < 0) { // EOF
-		if (! a2.unify(INT_EOF, engine.trail))
-		    return engine.fail();
-		return cont;
-	    } 
-	    if (c > 255)
-		throw new RepresentationException(this, 0, "byte");
-	    ((PushbackReader)stream).unread(c);
-	    if (! a2.unify(new IntegerTerm(c), engine.trail))
-		return engine.fail();
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/PRED_peek_char_2.java b/src/builtin/PRED_peek_char_2.java
deleted file mode 100644
index cb7330c..0000000
--- a/src/builtin/PRED_peek_char_2.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
-   <code>peek_char/2</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-public class PRED_peek_char_2 extends Predicate.P2 {
-    private static final SymbolTerm SYM_EOF = SymbolTerm.intern("end_of_file");
-
-    public PRED_peek_char_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    boolean inCharacter(Term t) {
-	if (! t.isSymbol())
-	    return false;
-	if (t.equals(SYM_EOF))
-	    return true;
-	return ((SymbolTerm)t).name().length() == 1;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	Object stream = null;
-
-	// Char
-	a2 = a2.dereference(); 
-	if (! a2.isVariable() && ! inCharacter(a2))
-	    throw new IllegalTypeException(this, 2, "in_character", a2);
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// read single character
-	try {
-	    int c = ((PushbackReader)stream).read();
-	    if (c < 0) { // EOF
-		if (! a2.unify(SYM_EOF, engine.trail))
-		    return engine.fail();
-		return cont;
-	    } 
-	    if (! Character.isDefined(c))
-		throw new RepresentationException(this, 0, "character");
-	    ((PushbackReader)stream).unread(c);
-	    if (! a2.unify(SymbolTerm.create((char)c), engine.trail))
-		return engine.fail();
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/PRED_peek_code_2.java b/src/builtin/PRED_peek_code_2.java
deleted file mode 100644
index c19676f..0000000
--- a/src/builtin/PRED_peek_code_2.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
-   <code>peek_code/2</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-public class PRED_peek_code_2 extends Predicate.P2 {
-    private static final IntegerTerm INT_EOF = new IntegerTerm(-1);
-
-    public PRED_peek_code_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	Object stream = null;
-
-	// Char
-	a2 = a2.dereference(); 
-	if (! a2.isVariable()) {
-	    if (! a2.isInteger())
-		throw new IllegalTypeException(this, 2, "integer", a2);
-	    int n = ((IntegerTerm)a2).intValue();
-	    if (n != -1 && ! Character.isDefined(n))
-		throw new RepresentationException(this, 2, "in_character_code");
-	}
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// read single character
-	try {
-	    int c = ((PushbackReader)stream).read();
-	    if (c < 0) { // EOF
-		if (! a2.unify(INT_EOF, engine.trail))
-		    return engine.fail();
-		return cont;
-	    } 
-	    if (! Character.isDefined(c))
-		throw new RepresentationException(this, 0, "character");
-	    ((PushbackReader)stream).unread(c);
-	    if (! a2.unify(new IntegerTerm(c), engine.trail))
-		return engine.fail();
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/PRED_put_byte_2.java b/src/builtin/PRED_put_byte_2.java
deleted file mode 100644
index 7b9dee8..0000000
--- a/src/builtin/PRED_put_byte_2.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
-   <code>put_byte/2</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.1
-   @since 1.1
-*/
-public class PRED_put_byte_2 extends Predicate.P2 {
-    public PRED_put_byte_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	int c;
-	Object stream = null;
-
-	// Byte
-	a2 = a2.dereference(); 
-	if (a2.isVariable())
-	    throw new PInstantiationException(this, 2);
-	if (! a2.isInteger())
-	    throw new IllegalTypeException(this, 2, "byte", a2);
-	c = ((IntegerTerm)a2).intValue();
-	if (c < 0 || c > 255)
-	    throw new IllegalTypeException(this, 2, "byte", a2);
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PrintWriter))
-	    throw new PermissionException(this, "output", "stream", a1, "");
-	// print single byte
-	((PrintWriter) stream).print((char)c);
-	return cont;
-    }
-}
diff --git a/src/builtin/PRED_set_input_1.java b/src/builtin/PRED_set_input_1.java
deleted file mode 100644
index 6a215aa..0000000
--- a/src/builtin/PRED_set_input_1.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.PushbackReader;
-/**
-   <code>set_input/1</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-public class PRED_set_input_1 extends Predicate.P1 {
-    public PRED_set_input_1(Term a1, Operation cont) {
-        arg1 = a1;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1;
-        a1 = arg1;
-	Object stream = null;
-
-	a1 = a1.dereference();
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	engine.setCurrentInput((PushbackReader)stream);
-        return cont;
-    }
-}
diff --git a/src/builtin/PRED_set_output_1.java b/src/builtin/PRED_set_output_1.java
deleted file mode 100644
index 656861b..0000000
--- a/src/builtin/PRED_set_output_1.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.PrintWriter;
-/**
-   <code>set_output/1</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-public class PRED_set_output_1 extends Predicate.P1 {
-    public PRED_set_output_1(Term a1, Operation cont) {
-        arg1 = a1;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1;
-        a1 = arg1;
-	Object stream = null;
-
-	a1 = a1.dereference();
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PrintWriter))
-	    throw new PermissionException(this, "output", "stream", a1, "");
-	engine.setCurrentOutput((PrintWriter)stream);
-        return cont;
-    }
-}
diff --git a/src/builtin/PRED_skip_2.java b/src/builtin/PRED_skip_2.java
deleted file mode 100644
index cded854..0000000
--- a/src/builtin/PRED_skip_2.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.*;
-import java.io.*;
-/**
-   <code>skip/2</code><br>
-   @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
-   @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
-   @version 1.0
-*/
-public class PRED_skip_2 extends Predicate.P2 {
-    private static final IntegerTerm INT_EOF = new IntegerTerm(-1);
-
-    public PRED_skip_2(Term a1, Term a2, Operation cont) {
-        arg1 = a1;
-        arg2 = a2;
-        this.cont = cont;
-    }
-
-    public Operation exec(Prolog engine) {
-        engine.setB0();
-        Term a1, a2;
-        a1 = arg1;
-        a2 = arg2;
-	int n;
-	Object stream = null;
-	
-	// Char
-	a2 = a2.dereference(); 
-	if (a2.isVariable())
-	    throw new PInstantiationException(this, 2);
-	if (! a2.isInteger()) {
-	    try {
-		a2 = Arithmetic.evaluate(a2);
-	    } catch (BuiltinException e) {
-		e.goal = this;
-		e.argNo = 2;
-		throw e;
-	    }
-	}
-	n = ((NumberTerm)a2).intValue();
-	if (! Character.isDefined(n))
-	    throw new RepresentationException(this, 2, "character_code");
-	// S_or_a
-	a1 = a1.dereference(); 
-	if (a1.isVariable()) {
-	    throw new PInstantiationException(this, 1);
-	} else if (a1.isSymbol()) {
-	    if (! engine.getStreamManager().containsKey(a1))
-		throw new ExistenceException(this, 1, "stream", a1, "");
-	    stream = ((JavaObjectTerm) engine.getStreamManager().get(a1)).object();
-	} else if (a1.isJavaObject()) {
-	    stream = ((JavaObjectTerm) a1).object();
-	} else {
-	    throw new IllegalDomainException(this, 1, "stream_or_alias", a1);
-	}
-	if (! (stream instanceof PushbackReader))
-	    throw new PermissionException(this, "input", "stream", a1, "");
-	// skip
-	try {
-	    PushbackReader in = (PushbackReader) stream;
-	    int c = in.read();
-	    while(c != n) {
-		c = in.read();
-		if (c == -1) // EOF
-		    return cont;
-		if (! Character.isDefined(c))
-		    throw new RepresentationException(this, 0, "character");
-	    } 
-	    return cont;
-	} catch (IOException e) {
-	    throw new TermException(new JavaObjectTerm(e));
-	}
-    }
-}
diff --git a/src/builtin/builtins.pl b/src/builtin/builtins.pl
index 3349f93..8e116cb 100644
--- a/src/builtin/builtins.pl
+++ b/src/builtin/builtins.pl
@@ -385,10 +385,6 @@
 	hash_contains_key(P, PI),
 	'$get_indices'(P, PI, H, RevRefs),
 	'$get_instances'(RevRefs, Cls_Refs),
-	% ???
-	%length(Cls_Refs,N),
-	%'$fast_write'([clause_internal,N,for,P,PI]),nl,
-	%
 	'$clause_internal0'(Cls_Refs, Cl, Ref).
 
 '$clause_internal0'([], _, _) :- fail.
@@ -462,7 +458,6 @@
 	'$check_procedure_permission'(P:PI, modify, static_procedure, assertz(T)),
 	copy_term(Cl, NewCl),
 	'$insert'(NewCl, Ref),
-	%'$fast_write'([intert,NewCl,Ref]), nl, %???
 	'$update_indexing'(P, PI, Cl, Ref, 'z'),
 	fail.
 assertz(_).
@@ -473,7 +468,6 @@
 	'$check_procedure_permission'(P:PI, modify, static_procedure, asserta(T)),
 	copy_term(Cl, NewCl),
 	'$insert'(NewCl, Ref),
-	%'$fast_write'([insert,NewCl,Ref]), nl, %???
 	'$update_indexing'(P, PI, Cl, Ref, 'a'),
 	fail.
 asserta(_).
@@ -484,7 +478,6 @@
 	'$check_procedure_permission'(P:PI, modify, static_procedure, abolish(T)),
 	'$new_indexing_hash'(P, PI, IH),
 	hash_get(IH, all, Refs),
-	%'$fast_write'([erase_all,Refs]), nl, %???
 	'$erase_all'(Refs),
 	hash_remove(P, PI),
 	fail.
@@ -497,7 +490,6 @@
 	T = (H :- _),
 	'$clause_internal'(P, PI, H, Cl0, Ref),
 	copy_term(Cl0, T),
-	%'$fast_write'([erase,Cl0,Ref]), nl, %???
 	'$erase'(Ref),
 	'$rehash_indexing'(P, PI, Ref).
 
@@ -507,7 +499,6 @@
 	'$check_procedure_permission'(P:PI, access, static_procedure, retractall(Head)),
 	'$clause_internal'(P, PI, H, Cl, Ref),
 	copy_term(Cl, (H :- _)),
-	%'$fast_write'([erase,Cl,Ref]), nl, %???
 	'$erase'(Ref),
 	'$rehash_indexing'(P, PI, Ref),
 	fail.
@@ -626,7 +617,6 @@
 '$update_indexing'(P, PI, Cl, Ref, A_or_Z) :-
 	'$new_indexing_hash'(P, PI, IH),
 	'$gen_indexing_keys'(Cl, IH, Keys),
-	%'$fast_write'([update_indexing,P,PI,Cl,Ref,Keys]), nl, %???
 	'$update_indexing_hash'(A_or_Z, Keys, IH, Ref).
 
 '$gen_indexing_keys'((H :- _), _, [all]) :- atom(H), !.
@@ -665,7 +655,6 @@
 '$rehash_indexing'(P, PI, Ref) :-
 	'$new_indexing_hash'(P, PI, IH),
 	hash_keys(IH, Keys),
-	%'$fast_write'([rehash_indexing,P,PI,Keys]), nl, %???
 	'$remove_index_all'(Keys, IH, Ref).
 
 '$remove_index_all'([], _, _) :- !.
@@ -829,154 +818,23 @@
 	'$builtin_set_diff0'([X|Xs], Ys, [Y|L]).
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Stream selection and control
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%:- public current_input/1  (written in Java)
-%:- public current_output/1 (written in Java)
-%:- public set_input/1, set_output/1. (written in Java)
-%:- public open/4 (written in Java)
-:- public open/3.
-%:- public close/2 (written in Java)
-:- public close/1.
-%:- public flush_output/1.(written in Java)
-:- public flush_output/0.
-:- public stream_property/2.
-
-open(Source_sink, Mode, Stream) :- open(Source_sink, Mode, Stream, []).
-
-close(S_or_a) :- close(S_or_a, []).
-
-flush_output :- 
-    current_output(S),
-    flush_output(S).
-
-stream_property(Stream, Stream_property) :- 
-	var(Stream_property), 
-	!,
-	'$stream_property'(Stream, Stream_property).
-stream_property(Stream, Stream_property) :- 
-	'$stream_property_specifier'(Stream_property), 
-	!,
-	'$stream_property'(Stream, Stream_property).
-stream_property(Stream, Stream_property) :- 
-	illarg(domain(term,stream_property), stream_property(Stream, Stream_property), 2).
-
-'$stream_property'(Stream, Stream_property) :- 
-	var(Stream),
-	!,
-	'$get_stream_manager'(SM),
-	hash_map(SM, Map),
-	'$builtin_member'((Stream,Vs), Map),
-	java(Stream),
-	'$builtin_member'(Stream_property, Vs).
-'$stream_property'(Stream, Stream_property) :- 
-	java(Stream),
-	!,
-	'$get_stream_manager'(SM),
-	hash_get(SM, Stream, Vs),
-	'$builtin_member'(Stream_property, Vs).
-'$stream_property'(Stream, Stream_property) :- 
-	illarg(domain(stream,stream), stream_property(Stream, Stream_property), 1).
-
-'$stream_property_specifier'(input).
-'$stream_property_specifier'(output).
-'$stream_property_specifier'(alias(_)).
-'$stream_property_specifier'(mode(_)).
-'$stream_property_specifier'(type(_)).
-'$stream_property_specifier'(file_name(_)).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Character input/output
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%:- public get_char/2, get_code/2.   (written in Java)
-%:- public peek_char/2, peek_code/2. (written in Java)
-%:- public put_char/2, put_code/2.   (written in Java)
-%:- public nl/0.                     (written in Java)
-
-:- public get_char/1, get_code/1.
-:- public peek_char/1, peek_code/1.
-:- public put_char/1, put_code/1.
-:- public nl/1.
-
-get_char(Char)  :- current_input(S), get_char(S, Char).
-get_code(Code)  :- current_input(S), get_code(S, Code).
-
-peek_char(Char) :- current_input(S), peek_char(S, Char).
-peek_code(Code) :- current_input(S), peek_code(S, Code).
-
-put_char(Char)  :- current_output(S), put_char(S, Char).
-put_code(Code)  :- current_output(S), put_code(S, Code).
-
-nl(S) :- put_char(S, '\n').
-
-:- public get0/1, get0/2.
-:- public get/1.
-%:- public get/2.  (written in Java)
-:- public put/1, put/2.
-:- public tab/1.
-%:- public tab/2.  (written in Java)
-:- public skip/1.
-%:- public skip/2. (written in Java)
-
-get0(Code)  :- current_input(S), get_code(S, Code).
-get0(S_or_a, Code)  :- get_code(S_or_a, Code).
-
-get(Code)  :- current_input(S), get(S, Code).
-
-put(Exp)  :- current_output(S), put(S, Exp).
-put(S_or_a, Exp)  :- Code is Exp, put_code(S_or_a, Code).
-
-tab(N) :- current_output(S), tab(S, N).
-
-skip(N) :- current_input(S), skip(S, N).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Byte input/output
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-:- public get_byte/1, peek_byte/1, put_byte/1.
-%:- public get_byte/2.  % written in java
-%:- public peek_byte/2. % written in java
-%:- public put_byte/2.  % written in java
-
-get_byte(Byte) :-
-    current_input(S),
-    get_byte(S, Byte).
-
-peek_byte(Byte) :-
-    current_input(S),
-    peek_byte(S, Byte).
-
-put_byte(Byte) :-
-    current_output(S),
-    put_byte(S, Byte).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Term input/output (read)
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-:- public read/1, read/2.
-:- public read_with_variables/2, read_with_variables/3.
-:- public read_line/1.
+:- public read/2.
+:- public read_with_variables/3.
 %:- public read_line/2. (written in Java)
 :- dynamic '$tokens'/1. 
 
-read(X) :- current_input(S), read(S, X).
-
 read(S_or_a, X) :-
 	read_tokens(S_or_a, Tokens, _),
 	parse_tokens(X, Tokens),
 	!.
 
-read_with_variables(X, Vs) :- 
-	current_input(S), 
-	read_with_variables(S, X, Vs).
-
 read_with_variables(S_or_a, X, Vs) :-
 	read_tokens(S_or_a, Tokens, Vs),
 	parse_tokens(X, Tokens),
 	!.
 
-read_line(X) :- current_input(S), read_line(S, X).
-
 % read_token(S_or_a, Token) reads one token from the input, 
 % and unifies Token with:
 %   error(Atom), 
@@ -987,8 +845,6 @@
 %   var(Atom), 
 %   string(CharCodeList)
 
-%read_token(Token) :- current_input(S), read_token(S, Token).
-
 read_token(S_or_a, Token) :-
 	'$read_token0'(S_or_a, Type, Token0),
 	'$read_token1'([Type], Token0, Token).
@@ -1007,11 +863,6 @@
 % Token for a variable has a form of var(Name,Variable).
 % Vs is a list of Name=Variable pairs.
 
-%read_tokens(Tokens, Vs) :-
-%	current_input(Stream),
-%	'$read_tokens'(Stream, Tokens, Vs, []),
-%	!.
-
 read_tokens(Stream, Tokens, Vs) :-
 	'$read_tokens'(Stream, Tokens, Vs, []),
 	!.
@@ -1021,9 +872,8 @@
 	'$read_tokens1'(Stream, Token, Tokens, Vs, VI).
 
 '$read_tokens1'(Stream, error(Message), [], _, _) :-  !,
-	write('{SYNTAX ERROR}'), nl, 
-	write('** '), write(Message), write(' **'), nl,
 	'$read_tokens_until_fullstop'(Stream),
+	raise_exception(syntax_error(Message)),
 	fail.
 '$read_tokens1'(_Stream, end_of_file, [end_of_file,'.'], [], _) :- !.
 '$read_tokens1'(_Stream, '.', ['.'], [], _) :- !.
@@ -1267,71 +1117,27 @@
 '$parse_tokens_peep_next'(Next, S, S) :- S = [Next|_].
 
 '$parse_tokens_error'(Message, S0, _S) :-
-	write('{SYNTAX ERROR}'), nl, write('** '),
-	'$parse_tokens_write_message'(Message), write(' **'), nl,
-	'$parse_tokens_error1'([], S0),
 	clause('$tokens'(Tokens), _),
-	'$parse_tokens_error1'(Tokens, S0),
+	raise_exception(syntax_error(Message, at(Tokens))),
 	fail.
 
-'$parse_tokens_error1'([], _) :- !.
-'$parse_tokens_error1'(Tokens, S0) :- Tokens == S0, !,
-	nl, write('** here **'), nl,
-	'$parse_tokens_error1'(Tokens, []), nl.
-'$parse_tokens_error1'([Token|Tokens], S0) :-
-	'$parse_tokens_error2'(Token),
-	'$parse_tokens_error1'(Tokens, S0).
-
-'$parse_tokens_error2'(number(X)) :- !, write(X).
-'$parse_tokens_error2'(atom(X)) :- !, writeq(X).
-'$parse_tokens_error2'(var(X,_)) :- !, write(X).
-'$parse_tokens_error2'(string(X)) :- !,
-	write('"'), '$parse_tokens_write_string'(X), write('"').
-'$parse_tokens_error2'(X) :- write(X).
-
-'$parse_tokens_write_string'([]).
-'$parse_tokens_write_string'([C|Cs]) :- [C] = """", !,
-	put_code(C), put_code(C), '$parse_tokens_write_string'(Cs).
-'$parse_tokens_write_string'([C|Cs]) :- 
-	put_code(C), '$parse_tokens_write_string'(Cs).
-
-'$parse_tokens_write_message'([]).
-'$parse_tokens_write_message'([X|Xs]) :-
-	write(X), write(' '), '$parse_tokens_write_message'(Xs).
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Term input/output (write)
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-:- public write/1, write/2.
-:- public writeq/1, writeq/2.
-:- public write_canonical/1, write_canonical/2.
-:- public write_term/2, write_term/3.
-
-write(Term) :-
-	current_output(S),
-	write_term(S, Term, [numbervars(true)]).
+:- public write/2.
+:- public writeq/2.
+:- public write_canonical/2.
+:- public write_term/3.
 
 write(S_or_a, Term) :-
 	write_term(S_or_a, Term, [numbervars(true)]).
 
-writeq(Term) :-
-	current_output(S),
-	write_term(S, Term, [quoted(true),numbervars(true)]).
-
 writeq(S_or_a, Term) :-
 	write_term(S_or_a, Term, [quoted(true),numbervars(true)]).
 
-write_canonical(Term) :-
-	current_output(S),
-	write_term(S, Term, [quoted(true),ignore_ops(true)]).
-
 write_canonical(S_or_a, Term) :-
 	write_term(S_or_a, Term, [quoted(true),ignore_ops(true)]).
 
-write_term(Term, Options) :-
-	current_output(S),
-	write_term(S, Term, Options).
-
 write_term(S_or_a, Term, Options) :-
 	'$write_term'(S_or_a, Term, Options),
 	fail.
@@ -1763,16 +1569,12 @@
 current_prolog_flag(Flag, Term) :- 
 	illarg(type(atom), current_prolog_flag(Flag,Term), 1).
 
-% '$prolog_impl_flag'(bounded,     _, changeable(no)). 
 '$prolog_impl_flag'(max_integer, _, changeable(no)).
 '$prolog_impl_flag'(min_integer, _, changeable(no)).
-% '$prolog_impl_flag'(integer_rounding_function, [down,toward_zero], changeable(no)).
-% '$prolog_impl_flag'(char_conversion, [on,off], changeable(no)).
 '$prolog_impl_flag'(debug, [on,off], changeable(yes)).
 '$prolog_impl_flag'(max_arity, _, changeable(no)).
 '$prolog_impl_flag'(unknown, [error,fail,warning], changeable(yes)).
 '$prolog_impl_flag'(double_quotes, [chars,codes,atom], changeable(no)).
-'$prolog_impl_flag'(print_stack_trace, [on,off], changeable(yes)).
 
 :- public halt/0.
 :- public abort/0.
@@ -2018,97 +1820,6 @@
 '$statistics_mode'(trail).
 '$statistics_mode'(choice).
 
-print_message(Type, Message) :- var(Type), !,
-	illarg(var, print_message(Type,Message), 1).
-print_message(error, Message) :- !, 
-	'$error_message'(Message).
-print_message(info,  Message) :- !,
-	'$fast_write'('{'), 
-	'$builtin_message'(Message), 
-	'$fast_write'('}'), nl.
-print_message(warning, Message) :- !,
-	'$fast_write'('{WARNING: '), 
-	'$builtin_message'(Message), 
-	'$fast_write'('}'), nl.
-
-'$error_message'(instantiation_error(Goal,0)) :- !,
-	'$fast_write'('{INSTANTIATION ERROR: '), 
-	'$write_goal'(Goal), 
-	'$fast_write'('}'), nl.
-'$error_message'(instantiation_error(Goal,ArgNo)) :- !,
-	'$fast_write'('{INSTANTIATION ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo), 
-	'$fast_write'('}'), nl.
-'$error_message'(type_error(Goal,ArgNo,Type,Culprit)) :- !,
-	'$fast_write'('{TYPE ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo), 
-	'$fast_write'(': expected '), '$fast_write'(Type),
-	'$fast_write'(', found '), write(Culprit),
-	'$fast_write'('}'), nl.
-'$error_message'(domain_error(Goal,ArgNo,Domain,Culprit)) :- !,
-	'$fast_write'('{DOMAIN ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
-	'$fast_write'(': expected '), '$fast_write'(Domain),
-	'$fast_write'(', found '), write(Culprit),
-	'$fast_write'('}'), nl.
-'$error_message'(existence_error(_Goal,0,ObjType,Culprit,_Message)) :- !,
-	'$fast_write'('{EXISTENCE ERROR: '),
-	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit), '$fast_write'(' does not exist'),
-	'$fast_write'('}'), nl.
-'$error_message'(existence_error(Goal,ArgNo,ObjType,Culprit,_Message)) :- !,
-	'$fast_write'('{EXISTENCE ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
-	'$fast_write'(': '), 
-	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit), '$fast_write'(' does not exist'),
-	'$fast_write'('}'), nl.
-'$error_message'(permission_error(Goal,Operation,ObjType,Culprit,Message)) :- !, 
-	'$fast_write'('{PERMISSION ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - can not '), '$fast_write'(Operation), '$fast_write'(' '), 
-	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit), 
-	'$fast_write'(': '), '$fast_write'(Message),
-	'$fast_write'('}'), nl.
-'$error_message'(representation_error(Goal,ArgNo,Flag)) :- !, 
-	'$fast_write'('{REPRESENTATION ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo), 
-	'$fast_write'(': limit of '), '$fast_write'(Flag), '$fast_write'(' is breached'),
-	'$fast_write'('}'), nl.
-'$error_message'(evaluation_error(Goal,ArgNo,Type)) :- !, 
-	'$fast_write'('{EVALUATION ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo), 
-	'$fast_write'(', found '), '$fast_write'(Type),
-	'$fast_write'('}'), nl.
-'$error_message'(syntax_error(Goal,ArgNo,Type,Culprit,_Message)) :- !,
-	'$fast_write'('{SYNTAX ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo), 
-	'$fast_write'(': expected '), '$fast_write'(Type),
-	'$fast_write'(', found '), write(Culprit),
-	'$fast_write'('}'), nl.
-'$error_message'(system_error(Message)) :- !,
-	'$fast_write'('{SYSTEM ERROR: '), write(Message), '$fast_write'('}'), nl.
-'$error_message'(internal_error(Message)) :- !,
-	'$fast_write'('{INTERNAL ERROR: '), write(Message), '$fast_write'('}'), nl.
-'$error_message'(java_error(Goal,ArgNo,Exception)) :- !,
-	'$fast_write'('{JAVA ERROR: '),
-	'$write_goal'(Goal), 
-	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
-	'$fast_write'(', found '), '$write_goal'(Exception),
-	'$fast_write'('}'), nl,
-	'$print_stack_trace'(Exception).
-'$error_message'(Message) :- 
-	'$fast_write'('{'), write(Message), '$fast_write'('}'), nl.
-
-'$write_goal'(Goal) :- java(Goal), !, 
-	current_output(S), '$write_toString'(S, Goal).
-'$write_goal'(Goal) :- write(Goal).
-
 illarg(Msg, Goal, ArgNo) :- var(Msg), !,
 	illarg(var, Goal, ArgNo).
 illarg(var, Goal, ArgNo) :-
@@ -2183,10 +1894,6 @@
 '$builtin_member'(X, [X|_]).
 '$builtin_member'(X, [_|L]) :- '$builtin_member'(X, L).	
 
-'$builtin_message'([]) :- !.
-'$builtin_message'([M]) :- !, write(M).
-'$builtin_message'([M|Ms]) :- write(M), '$fast_write'(' '), '$builtin_message'(Ms).
-
 '$member_in_reverse'(X, [_|L]) :- '$member_in_reverse'(X, L).
 '$member_in_reverse'(X, [X|_]).
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/builtin/cafeteria.pl b/src/builtin/cafeteria.pl
index cb63123..7bb5f33 100644
--- a/src/builtin/cafeteria.pl
+++ b/src/builtin/cafeteria.pl
@@ -43,7 +43,7 @@
 	flush_output.
 
 '$cafeteria'(Goal) :-
-	read_with_variables(Goal, Vars),
+	read_with_variables('user_input', Goal, Vars),
 	'$process_order'(Goal, Vars).
 
 '$process_order'(G,               _) :- var(G), !, illarg(var, (?- G), 1).
@@ -68,7 +68,7 @@
 '$give_answers_with_prompt'(Vs) :-
 	'$give_an_answer'(Vs),
 	'$fast_write'(' ? '), flush_output,
-	read_line(Str),
+	read_line('user_input', Str),
 	Str \== ";",
 	nl.
 
@@ -92,7 +92,6 @@
 '$consult'(F) :-
 	'$prolog_file_name'(F, PF),
 	open(PF, read, In),
-	stream_property(In, file_name(File)),
 	print_message(info, [consulting,File,'...']),
 	statistics(runtime, _),
 	consult_stream(File, In),
@@ -176,7 +175,7 @@
 '$read_blocked'(G) :-
 	'$fast_write'(' ? '),
 	flush_output,
-	read_line(C),
+	read_line('user_input', C),
 	(C == [] -> DOP = 99 ; C = [DOP|_]),
 	'$debug_option'(DOP, G).
 
@@ -339,3 +338,108 @@
 	tab(N), write(')').
 '$write_dynamic_body'(B, N) :-
 	tab(N), writeq(B).
+
+
+print_message(Type, Message) :- var(Type), !,
+	illarg(var, print_message(Type,Message), 1).
+print_message(error, Message) :- !,
+	'$error_message'(Message).
+print_message(info,  Message) :- !,
+	'$fast_write'('{'),
+	'$builtin_message'(Message),
+	'$fast_write'('}'), nl.
+print_message(warning, Message) :- !,
+	'$fast_write'('{WARNING: '),
+	'$builtin_message'(Message),
+	'$fast_write'('}'), nl.
+
+write(M)  :- write('user_output', M).
+writeq(M) :- writeq('user_output', M).
+tab(S)    :- tab('user_output', S).
+nl        :- nl('user_output').
+flush_output :- flush_output('user_output').
+'$fast_write'(M) :- '$fast_write'('user_output', M).
+
+'$builtin_message'([]) :- !.
+'$builtin_message'([M]) :- !, write(M).
+'$builtin_message'([M|Ms]) :-
+	write(M),
+	'$fast_write'(' '),
+	'$builtin_message'(Ms).
+
+'$error_message'(instantiation_error(Goal,0)) :- !,
+	'$fast_write'('{INSTANTIATION ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'('}'), nl.
+'$error_message'(instantiation_error(Goal,ArgNo)) :- !,
+	'$fast_write'('{INSTANTIATION ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'('}'), nl.
+'$error_message'(type_error(Goal,ArgNo,Type,Culprit)) :- !,
+	'$fast_write'('{TYPE ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(': expected '), '$fast_write'(Type),
+	'$fast_write'(', found '), write(Culprit),
+	'$fast_write'('}'), nl.
+'$error_message'(domain_error(Goal,ArgNo,Domain,Culprit)) :- !,
+	'$fast_write'('{DOMAIN ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(': expected '), '$fast_write'(Domain),
+	'$fast_write'(', found '), write(Culprit),
+	'$fast_write'('}'), nl.
+'$error_message'(existence_error(_Goal,0,ObjType,Culprit,_Message)) :- !,
+	'$fast_write'('{EXISTENCE ERROR: '),
+	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit), '$fast_write'(' does not exist'),
+	'$fast_write'('}'), nl.
+'$error_message'(existence_error(Goal,ArgNo,ObjType,Culprit,_Message)) :- !,
+	'$fast_write'('{EXISTENCE ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(': '),
+	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit), '$fast_write'(' does not exist'),
+	'$fast_write'('}'), nl.
+'$error_message'(permission_error(Goal,Operation,ObjType,Culprit,Message)) :- !,
+	'$fast_write'('{PERMISSION ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - can not '), '$fast_write'(Operation), '$fast_write'(' '),
+	'$fast_write'(ObjType), '$fast_write'(' '), write(Culprit),
+	'$fast_write'(': '), '$fast_write'(Message),
+	'$fast_write'('}'), nl.
+'$error_message'(representation_error(Goal,ArgNo,Flag)) :- !,
+	'$fast_write'('{REPRESENTATION ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(': limit of '), '$fast_write'(Flag), '$fast_write'(' is breached'),
+	'$fast_write'('}'), nl.
+'$error_message'(evaluation_error(Goal,ArgNo,Type)) :- !,
+	'$fast_write'('{EVALUATION ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(', found '), '$fast_write'(Type),
+	'$fast_write'('}'), nl.
+'$error_message'(syntax_error(Goal,ArgNo,Type,Culprit,_Message)) :- !,
+	'$fast_write'('{SYNTAX ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(': expected '), '$fast_write'(Type),
+	'$fast_write'(', found '), write(Culprit),
+	'$fast_write'('}'), nl.
+'$error_message'(system_error(Message)) :- !,
+	'$fast_write'('{SYSTEM ERROR: '), write(Message), '$fast_write'('}'), nl.
+'$error_message'(internal_error(Message)) :- !,
+	'$fast_write'('{INTERNAL ERROR: '), write(Message), '$fast_write'('}'), nl.
+'$error_message'(java_error(Goal,ArgNo,Exception)) :- !,
+	'$fast_write'('{JAVA ERROR: '),
+	'$write_goal'(Goal),
+	'$fast_write'(' - arg '), '$fast_write'(ArgNo),
+	'$fast_write'(', found '), '$write_goal'(Exception),
+	'$fast_write'('}'), nl.
+'$error_message'(Message) :-
+	'$fast_write'('{'), write(Message), '$fast_write'('}'), nl.
+
+'$write_goal'(Goal) :- java(Goal), !,
+	'$write_toString'('user_error', Goal).
+'$write_goal'(Goal) :- write(Goal).
diff --git a/src/builtin/io.pl b/src/builtin/io.pl
new file mode 100644
index 0000000..16a1220
--- /dev/null
+++ b/src/builtin/io.pl
@@ -0,0 +1,26 @@
+:- package 'com.googlecode.prolog_cafe.builtin'.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Stream selection and control
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%:- public open/4 (written in Java)
+:- public open/3.
+%:- public close/2 (written in Java)
+:- public close/1.
+
+open(Source_sink, Mode, Stream) :- open(Source_sink, Mode, Stream, []).
+
+close(S_or_a) :- close(S_or_a, []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Character input/output
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%:- public get_char/2.   (written in Java)
+%:- public put_char/2, put_code/2.   (written in Java)
+:- public nl/1.
+
+nl(S) :- put_char(S, '\n').
+
+%:- public get/2.  (written in Java)
+%:- public tab/2.  (written in Java)
+%:- public skip/2. (written in Java)
diff --git a/src/builtin/system.pl b/src/builtin/system.pl
index 2d80aff..101ff35 100644
--- a/src/builtin/system.pl
+++ b/src/builtin/system.pl
@@ -133,61 +133,27 @@
 system_predicate(bagof(_,_,_)).
 system_predicate(setof(_,_,_)).
 % Stream selection and control
-system_predicate(current_input(_)).
-system_predicate(current_output(_)).
-system_predicate(set_input(_)).
-system_predicate(set_output(_)).
 system_predicate(open(_,_,_)).
 system_predicate(open(_,_,_,_)).
 system_predicate(close(_)).
 system_predicate(close(_,_)).
 system_predicate(flush_output(_)).
-system_predicate(flush_output).
-system_predicate(stream_property(_,_)).
 % Character input/output
-system_predicate(get_char(_)).
 system_predicate(get_char(_,_)).
-system_predicate(get_code(_)).
 system_predicate(get_code(_,_)).
-system_predicate(peek_char(_)).
-system_predicate(peek_char(_,_)).
-system_predicate(peek_code(_)).
-system_predicate(peek_code(_,_)).
-system_predicate(put_char(_)).
 system_predicate(put_char(_,_)).
-system_predicate(put_code(_)).
 system_predicate(put_code(_,_)).
-system_predicate(nl).
 system_predicate(nl(_)).
-system_predicate(get0(_)).
-system_predicate(get0(_,_)).
-system_predicate(get(_)).
 system_predicate(get(_,_)).
-system_predicate(put(_)).
 system_predicate(put(_,_)).
-system_predicate(tab(_)).
 system_predicate(tab(_,_)).
-system_predicate(skip(_)).
 system_predicate(skip(_,_)).
-% Byte input/output
-system_predicate(get_byte(_)).
-system_predicate(get_byte(_,_)).
-system_predicate(peek_byte(_)).
-system_predicate(peek_byte(_,_)).
-system_predicate(put_byte(_)).
-system_predicate(put_byte(_,_)).
 % Term input/output
-system_predicate(read(_)).
 system_predicate(read(_,_)).
-system_predicate(read_with_variables(_,_)).
 system_predicate(read_with_variables(_,_,_)).
-system_predicate(read_line(_)).
 system_predicate(read_line(_,_)).
-system_predicate(write(_)).
 system_predicate(write(_,_)).
-system_predicate(writeq(_)).
 system_predicate(writeq(_,_)).
-system_predicate(write_canonical(_)).
 system_predicate(write_canonical(_,_)).
 system_predicate(write_term(_,_)).
 system_predicate(write_term(_,_,_)).
diff --git a/src/compiler/am2j.pl b/src/compiler/am2j.pl
index 96354be..8da39a3 100644
--- a/src/compiler/am2j.pl
+++ b/src/compiler/am2j.pl
@@ -49,14 +49,10 @@
 % :- module('com.googlecode.prolog_cafe.compiler.am2j', [main/0,am2j/1]).
 package(_). 
 :- package 'com.googlecode.prolog_cafe.compiler.am2j'.
-:- public main/0, am2j/1.
+:- public am2j/1.
 /*****************************************************************
   Main
 *****************************************************************/
-main :- 
-	read(X), 
-	am2j(X).
-
 am2j([File]) :- !, am2j([File, '.']).
 am2j([File,Dir]) :-
 	retractall(dest_dir(_)),
@@ -1228,11 +1224,7 @@
 for(M, M, N) :- M =< N.
 for(I, M, N) :- M =< N, M1 is M + 1, for(I, M1, N).
 
-%%% print
-am2j_error(M) :- am2j_message(['***','AM2JAVA','ERROR'|M]).
-
-am2j_message([]) :- nl, flush_output(user_output).
-am2j_message([M|Ms]) :- write(M), write(' '), am2j_message(Ms).
+am2j_error(M) :- raise_exception(am2j_error(M)).
 
 %%% list
 am2j_append([], Zs, Zs).
diff --git a/src/compiler/pl2am.pl b/src/compiler/pl2am.pl
index 96cac36..f588822 100644
--- a/src/compiler/pl2am.pl
+++ b/src/compiler/pl2am.pl
@@ -171,14 +171,10 @@
 % :- module('com.googlecode.prolog_cafe.compiler.pl2am', [main/0,pl2am/1]).
 :- package 'com.googlecode.prolog_cafe.compiler.pl2am'.
 
-:- public main/0, pl2am/1.
+:- public pl2am/1.
 /*****************************************************************
   Main
 *****************************************************************/
-main :- 
-	read(X), 
-	pl2am(X).
-
 pl2am([PrologFile, AsmFile, Opts]) :-
 	read_in_program(PrologFile, Opts),
 	open(AsmFile, write, Out),
@@ -287,11 +283,11 @@
 assert_clause((:- import G)) :- !,
 	assert_import(G).
 assert_clause((:- mode _G)) :- !,
-	pl2am_message(['*** WARNING',mode,declaration,is,not,supported,yet]).
+	pl2am_error([mode,declaration,is,not,supported,yet]).
 assert_clause((:- multifile _G)) :- !,
-	pl2am_message(['*** WARNING',multifile,declaration,is,not,supported,yet]).
+	pl2am_error([multifile,declaration,is,not,supported,yet]).
 assert_clause((:- block _G)) :- !,
-	pl2am_message(['*** WARNING',block,declaration,is,not,supported,yet]).
+	pl2am_error([block,declaration,is,not,supported,yet]).
 assert_clause((:- G)) :- !, 
 	call(G),
 	assert_declarations(G).
@@ -1683,11 +1679,7 @@
 /*****************************************************************
   Utilities
 *****************************************************************/
-%%% print
-pl2am_error(M) :- pl2am_message(['***','PL2ASM','ERROR'|M]).
-
-pl2am_message([]) :- nl, flush_output(user_output).
-pl2am_message([M|Ms]) :- write(M), write(' '), pl2am_message(Ms).
+pl2am_error(M) :- raise_exception(pl2am_error(M)).
 
 %%% format
 mode_expr([]).
diff --git a/src/lang/BlockingPrologControl.java b/src/lang/BlockingPrologControl.java
index 33e9219..907997d 100644
--- a/src/lang/BlockingPrologControl.java
+++ b/src/lang/BlockingPrologControl.java
@@ -371,9 +371,6 @@
   } catch (JavaInterruptedException e) {
      System.exit(1);
   } catch (PrologException e){
-      if (engine.getPrintStackTrace().equals("on"))
-      printStackTrace(e);
-      else
       System.out.println(e.toString());
   } catch (Exception e){
       printStackTrace(e);
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java
index c939c7e..5b62ee8 100644
--- a/src/lang/Prolog.java
+++ b/src/lang/Prolog.java
@@ -73,8 +73,6 @@
     protected String unknown;
     /** <font color="red">Not supported yet</font>. Prolog implementation flag: <code>double_quotes</code>. */
     protected String doubleQuotes;
-    /** Prolog implementation flag: <code>print_stack_trace</code>. */
-    protected String printStackTrace;
 
     /** Holds an exception term for <code>catch/3</code> and <code>throw/1</code>. */
     protected Term exception;
@@ -90,16 +88,6 @@
     /** The size of the pushback buffer used for creating input streams. */
     public static final int PUSHBACK_SIZE = 3;
 
-    /** Standard input stream. */
-    protected transient PushbackReader userInput;
-    /** Standard output stream. */
-    protected transient PrintWriter userOutput;
-    /** Standard error stream. */
-    protected transient PrintWriter userError;
-    /** Current input stream. */
-    protected transient PushbackReader currentInput;
-    /** Current output stream. */
-    protected transient PrintWriter currentOutput;
     /** Hashtable for managing input and output streams. */
     protected HashtableOfTerm streamManager;
 
@@ -121,35 +109,6 @@
     static final SymbolTerm SYM_INPUT      = SymbolTerm.intern("input");
     static final SymbolTerm SYM_OUTPUT     = SymbolTerm.intern("output");
     static final SymbolTerm SYM_TEXT       = SymbolTerm.intern("text");
-    static final SymbolTerm SYM_USERINPUT  = SymbolTerm.intern("user_input");
-    static final SymbolTerm SYM_USEROUTPUT = SymbolTerm.intern("user_output");
-    static final SymbolTerm SYM_USERERROR  = SymbolTerm.intern("user_error");
-
-    private static final PrintWriter NO_OUTPUT = new PrintWriter(new Writer() {
-      @Override
-      public void write(char[] cbuf, int off, int len) throws IOException {
-        throw new IOException("Prolog.Feature.IO disabled");
-      }
-
-      @Override
-      public void flush() throws IOException {
-      }
-
-      @Override
-      public void close() throws IOException {
-      }
-    });
-
-    private static final PushbackReader NO_INPUT = new PushbackReader(new Reader() {
-      @Override
-      public int read(char[] cbuf, int off, int len) throws IOException {
-        return -1;
-      }
-
-      @Override
-      public void close() throws IOException {
-      }
-    });
 
     public static enum Feature {
       /** Access to the local filesystem and console. */
@@ -186,9 +145,6 @@
      * This <code>initOnce</code> method is invoked in the constructor
      * and initializes the following instances:
      * <ul>
-     *   <li><code>userInput</code>
-     *   <li><code>userOutput</code>
-     *   <li><code>userError</code>
      *   <li><code>copyHash</code>
      *   <li><code>streamManager</code>
      * </ul>
@@ -203,28 +159,6 @@
     if (internalDB == null) internalDB = new InternalDatabase();
 
     streamManager = new HashtableOfTerm();
-
-    if (features.contains(Feature.IO)) {
-      userInput = new PushbackReader(new BufferedReader(new InputStreamReader(System.in)), PUSHBACK_SIZE);
-      userOutput = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)), true);
-      userError = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err)), true);
-
-      streamManager.put(SYM_USERINPUT, new JavaObjectTerm(userInput));
-      streamManager.put(new JavaObjectTerm(userInput),
-        makeStreamProperty(SYM_READ, SYM_INPUT, SYM_USERINPUT, SYM_TEXT));
-
-      streamManager.put(SYM_USEROUTPUT, new JavaObjectTerm(userOutput));
-      streamManager.put(new JavaObjectTerm(userOutput),
-        makeStreamProperty(SYM_APPEND, SYM_OUTPUT, SYM_USEROUTPUT, SYM_TEXT));
-
-      streamManager.put(SYM_USERERROR, new JavaObjectTerm(userError));
-      streamManager.put(new JavaObjectTerm(userError),
-        makeStreamProperty(SYM_APPEND, SYM_OUTPUT, SYM_USERERROR, SYM_TEXT));
-    } else {
-      userInput = NO_INPUT;
-      userOutput = NO_OUTPUT;
-      userError = userOutput;
-    }
   }
 
     /** Initializes this Prolog engine. */
@@ -250,16 +184,12 @@
 	debug           = "off";
 	unknown         = "error";
 	doubleQuotes    = "codes";
-	printStackTrace = "off";
 
 	exception = NONE;
 	startRuntime = features.contains(Feature.STATISTICS_RUNTIME)
 	    ? System.currentTimeMillis()
 	    : 0;
 	previousRuntime = 0;
-
-	currentInput  = userInput;
-	currentOutput = userOutput;
     }
 
     /** Ensure a feature is enabled, throwing if not. */
@@ -415,19 +345,6 @@
 	return p;
     }
 
-    Term makeStreamProperty(SymbolTerm _mode, SymbolTerm io, SymbolTerm _alias, SymbolTerm _type) {
-	Term[] mode  = {_mode};
-	Term[] alias = {_alias};
-	Term[] type  = {_type};
-
-	Term t = Nil;
-	t = new ListTerm(new StructureTerm(SYM_MODE_1,  mode ), t);
-	t = new ListTerm(io, t);
-	t = new ListTerm(new StructureTerm(SYM_ALIAS_1, alias), t);
-	t = new ListTerm(new StructureTerm(SYM_TYPE_1,  type ), t);
-	return t;
-    }
-
     /** Returns the current time stamp of choice point frame. */
     public long    getCPFTimeStamp() { return CPFTimeStamp; }
 
@@ -466,11 +383,6 @@
     /** Sets the value of Prolog implementation flag: <code>double_quotes</code>. */
     public void setDoubleQuotes(String mode) { doubleQuotes = mode;}
 
-    /** Returns the value of Prolog implementation flag: <code>print_stack_trace</code>. */
-    public String getPrintStackTrace() { return printStackTrace; }
-    /** Sets the value of Prolog implementation flag: <code>print_stack_trace</code>. */
-    public void setPrintStackTrace(String mode) { printStackTrace = mode;}
-
     /** Returns the value of <code>exception</code>. This is used in <code>catch/3</code>. */
     public Term getException() { return exception; }
     /** Sets the value of <code>exception</code>. This is used in <code>throw/1</code>. */
@@ -484,23 +396,6 @@
     /** Sets the value of <code>previousRuntime</code>. This is used in <code>statistics/2</code>. */
     public void setPreviousRuntime(long t) { previousRuntime = t; }
 
-    /** Returns the standard input stream. */
-    public PushbackReader  getUserInput() { return userInput; }
-    /** Returns the standard output stream. */
-    public PrintWriter     getUserOutput() { return userOutput; }
-    /** Returns the standard error stream. */
-    public PrintWriter     getUserError() { return userError; }
-
-    /** Returns the current input stream. */
-    public PushbackReader  getCurrentInput() { return currentInput; }
-    /** Sets the current input stream to <code>in</code>. */
-    public void            setCurrentInput(PushbackReader in) { currentInput = in; }
-
-    /** Returns the current output stream. */
-    public PrintWriter     getCurrentOutput() { return currentOutput; }
-    /** Sets the current output stream to <code>out</code>. */
-    public void            setCurrentOutput(PrintWriter out) { currentOutput = out; }
-
     /** Returns the stream manager. */
     public HashtableOfTerm getStreamManager() { return streamManager; }
 
diff --git a/src/lang/PrologMain.java b/src/lang/PrologMain.java
index 1e41c38..956248e 100644
--- a/src/lang/PrologMain.java
+++ b/src/lang/PrologMain.java
@@ -1,4 +1,10 @@
 package com.googlecode.prolog_cafe.lang;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.PushbackReader;
 import java.util.StringTokenizer;
 /**
  * Prolog Cafe launcher.
@@ -47,7 +53,23 @@
 		usage();
 		System.exit(1);
 	    }
+
 	    p = new BlockingPrologControl();
+	    p.engine.init();
+		p.engine.getStreamManager().put(
+			SymbolTerm.intern("user_input"),
+			new JavaObjectTerm(new PushbackReader(new BufferedReader(
+				new InputStreamReader(System.in)),
+				Prolog.PUSHBACK_SIZE)));
+		p.engine.getStreamManager().put(
+			SymbolTerm.intern("user_output"),
+			new JavaObjectTerm(new PrintWriter(new BufferedWriter(
+				new OutputStreamWriter(System.out)), true)));
+		p.engine.getStreamManager().put(
+			SymbolTerm.intern("user_error"),
+			new JavaObjectTerm(new PrintWriter(new BufferedWriter(
+				new OutputStreamWriter(System.err)), true)));
+
 	    p.setPredicate(Prolog.BUILTIN, "initialization", arg1, arg2);
 	    for (boolean r = p.call(); r; r = p.redo()) {}
 	    System.exit(0);
