diff --git a/src/builtin/PRED_regex_match_3.java b/src/builtin/PRED_regex_match_3.java
index 5d796f5..a96779a 100644
--- a/src/builtin/PRED_regex_match_3.java
+++ b/src/builtin/PRED_regex_match_3.java
@@ -1,7 +1,6 @@
 package com.googlecode.prolog_cafe.builtin;
 import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
-import com.googlecode.prolog_cafe.lang.ChoicePointFrame;
 import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
 import com.googlecode.prolog_cafe.lang.ListTerm;
 import com.googlecode.prolog_cafe.lang.Operation;
@@ -10,7 +9,6 @@
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
-import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -59,7 +57,7 @@
 
       engine.r1 = new JavaObjectTerm(matcher);
       engine.r2 = arg3;
-      return engine.jtry(regex_check, regex_next, new ChoicePointFrame.S2(engine));
+      return engine.jtry2(regex_check, regex_next);
   }
 
   private static final class PRED_regex_check extends Operation {
@@ -94,7 +92,7 @@
         return engine.fail();
       }
 
-      return engine.jtry(regex_check, regex_next, new ChoicePointFrame.S2(engine));
+      return engine.jtry2(regex_check, regex_next);
     }
   }
 
diff --git a/src/compiler/am2j.pl b/src/compiler/am2j.pl
index 04a39b4..2121f86 100644
--- a/src/compiler/am2j.pl
+++ b/src/compiler/am2j.pl
@@ -130,6 +130,12 @@
 	write(Out, 'import '), 
 	write_package(P, Out), 
 	write(Out, '.*;'), nl(Out).
+write_java0(import_static(P,F), _, Out) :- !,
+	write(Out, 'import static '),
+	write_package(P, Out),
+	write(Out, '.'),
+	write(Out, F),
+	write(Out, ';'), nl(Out).
 write_java0(import_package(P,FA), _, Out) :- !,
 	write(Out, 'import '), 
 	write_package(P, Out), 
@@ -143,12 +149,7 @@
 write_java0((Label: Instruction), In, Out) :- !,
 	write_label(Label, Out),
 	write_java0(Instruction, In, Out).
-write_java0(label(fail/0), _, Out) :- !,
-	tab(Out, 4),
-	write(Out, 'static final Operation '),
-	write_index(fail/0, Out),
-	write(Out, ' = com.googlecode.prolog_cafe.lang.Failure.FAIL_0'),
-	write(Out, ';'), nl(Out).
+write_java0(label(fail/0), _, _) :- !.
 write_java0(label(L), _, Out) :- !,
 	tab(Out, 4),
 	write(Out, 'static final Operation '),
@@ -468,16 +469,10 @@
 write_java0(try(Li,Lj), _, Out) :- !, 
 	clause(current_arity(A), _),
 	tab(Out, 8),
-	write(Out, 'return engine.jtry('),
+	write(Out, 'return engine.jtry'), write(Out, A), write(Out, '('),
 	write_index(Li, Out), 
 	write(Out, ', '),
 	write_index(Lj, Out),
-	write(Out, ', '),
-	( A == 0 ->
-		write(Out, 'new S0()')
-		;
-		write(Out, 'new S'), write(Out, A), write(Out, '(engine)')
-	),
 	write(Out, ');'), nl(Out).
 write_java0(retry(Li,Lj), _, Out) :- !, 
 	tab(Out, 8),
@@ -1170,6 +1165,7 @@
 +  end_predicate(p, f/n)
 
 +  import_package(p)
++  import_static(p, f/n)
 +  import_package(p, f/n)
 
 +  main(f/n, public): [Instructions]
diff --git a/src/compiler/pl2am.pl b/src/compiler/pl2am.pl
index dca9608..2cbe84c 100644
--- a/src/compiler/pl2am.pl
+++ b/src/compiler/pl2am.pl
@@ -102,6 +102,7 @@
   end_predicate(p, f/n)
 
   import_package(p)
+  import_static(p, f/n)
   import_package(p, f/n)
 
   main(f/n, public): [Instructions]
@@ -162,6 +163,7 @@
 :- dynamic package_name/1.
 :- dynamic public_predicates/2.
 :- dynamic import_package/2.
+:- dynamic import_static/2.
 :- dynamic internal_declarations/1.
 :- dynamic file_name/1.
 :- dynamic dummy_clause_counter/1.
@@ -205,6 +207,7 @@
 	retractall(package_name(_)),
 	retractall(public_predicates(_,_)),
 	retractall(import_package(_,_)),
+	retractall(import_static(_,_)),
 	retractall(internal_declarations(_)),
 	retractall(file_name(_)),
 	retractall(dummy_clause_counter(_)),
@@ -250,7 +253,7 @@
 	assert_import('com.googlecode.prolog_cafe.builtin'),
 	assert_import('com.googlecode.prolog_cafe.exceptions'),
 	assert_import('com.googlecode.prolog_cafe.lang'),
-	assert_import('com.googlecode.prolog_cafe.lang.ChoicePointFrame'),
+	assert(import_static('com.googlecode.prolog_cafe.lang.Failure', fail_0)),
 	assert_dummy_package,
 	assert_dummy_public.
 
@@ -815,16 +818,23 @@
 
 %%% Import Declarations
 generate_import --> 
+	{findall((P,C), import_static(P, C), S)},
+	gen_importstatic(S),
 	{findall((P,C), import_package(P, C), X)},
-	gen_import(X).
+	gen_importpkg(X).
 
-gen_import([]) --> !.
-gen_import([(P,'*')|Xs]) --> !, 
+gen_importstatic([]) --> !.
+gen_importstatic([(P,C)|Xs]) -->
+	[import_static(P, C)],
+	gen_importstatic(Xs).
+
+gen_importpkg([]) --> !.
+gen_importpkg([(P,'*')|Xs]) --> !,
 	[import_package(P)],
-	gen_import(Xs).
-gen_import([(P,C)|Xs]) --> 
+	gen_importpkg(Xs).
+gen_importpkg([(P,C)|Xs]) -->
 	[import_package(P, C)],
-	gen_import(Xs).
+	gen_importpkg(Xs).
 
 %%% Information
 generate_info(Functor, Arity) --> 
diff --git a/src/lang/ChoicePointFrame.java b/src/lang/ChoicePointFrame.java
index 908586a..f94dd90 100644
--- a/src/lang/ChoicePointFrame.java
+++ b/src/lang/ChoicePointFrame.java
@@ -9,7 +9,7 @@
  * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
  * @version 1.0
  */
-public abstract class ChoicePointFrame {
+class ChoicePointFrame {
     ChoicePointFrame prior;
 
     long timeStamp;
@@ -31,13 +31,10 @@
       return t;
     }
 
-    public static final class S0 extends ChoicePointFrame {
-    }
-
-    public static final class S1 extends ChoicePointFrame {
+    static final class S1 extends ChoicePointFrame {
       private final Term r1;
 
-      public S1(Prolog engine) {
+      S1(Prolog engine) {
         this.r1 = engine.r1;
       }
 
@@ -47,10 +44,10 @@
       }
     }
 
-    public static final class S2 extends ChoicePointFrame {
+    static final class S2 extends ChoicePointFrame {
       private final Term r1, r2;
 
-      public S2(Prolog engine) {
+      S2(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
       }
@@ -61,10 +58,10 @@
       }
     }
 
-    public static final class S3 extends ChoicePointFrame {
+    static final class S3 extends ChoicePointFrame {
       private final Term r1, r2, r3;
 
-      public S3(Prolog engine) {
+      S3(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -78,10 +75,10 @@
       }
     }
 
-    public static final class S4 extends ChoicePointFrame {
+    static final class S4 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4;
 
-      public S4(Prolog engine) {
+      S4(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -97,10 +94,10 @@
       }
     }
 
-    public static final class S5 extends ChoicePointFrame {
+    static final class S5 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5;
 
-      public S5(Prolog engine) {
+      S5(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -118,10 +115,10 @@
       }
     }
 
-    public static final class S6 extends ChoicePointFrame {
+    static final class S6 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6;
 
-      public S6(Prolog engine) {
+      S6(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -141,10 +138,10 @@
       }
     }
 
-    public static final class S7 extends ChoicePointFrame {
+    static final class S7 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7;
 
-      public S7(Prolog engine) {
+      S7(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -166,10 +163,10 @@
       }
     }
 
-    public static class S8 extends ChoicePointFrame {
+    static class S8 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8;
 
-      public S8(Prolog engine) {
+      S8(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -193,7 +190,7 @@
       }
     }
 
-    public static class S9 extends ChoicePointFrame {
+    static class S9 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8, r9;
 
       S9(Prolog engine) {
@@ -222,10 +219,10 @@
       }
     }
 
-    public static class S10 extends ChoicePointFrame {
+    static class S10 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
 
-      public S10(Prolog engine) {
+      S10(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
diff --git a/src/lang/Failure.java b/src/lang/Failure.java
index 15c3c04..7b109a0 100644
--- a/src/lang/Failure.java
+++ b/src/lang/Failure.java
@@ -22,7 +22,7 @@
     /** Returns a string representation of this <code>Failure</code>. */
     public String toString(){ return "Failure"; }
 
-    public static final Operation FAIL_0 = new PRED_fail_0();
+    public static final Operation fail_0 = new PRED_fail_0();
     private static final class PRED_fail_0 extends Operation {
       @Override
       public Operation exec(Prolog engine) throws PrologException {
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java
index 231ab2c..4279f99 100644
--- a/src/lang/Prolog.java
+++ b/src/lang/Prolog.java
@@ -139,7 +139,7 @@
 	CPFTimeStamp = Long.MIN_VALUE;
 
 	// Creates an initial choice point frame.
-	ChoicePointFrame initialFrame = new ChoicePointFrame.S0();
+	ChoicePointFrame initialFrame = new ChoicePointFrame();
 	initialFrame.b0 = B0;
 	initialFrame.bp = Failure.FAILURE;
 	initialFrame.tr = trail.top();
@@ -261,8 +261,20 @@
       stack.top.restore(this);
     }
 
+    public Operation jtry0(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame()); }
+    public Operation jtry1(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S1(this)); }
+    public Operation jtry2(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S2(this)); }
+    public Operation jtry3(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S3(this)); }
+    public Operation jtry4(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S4(this)); }
+    public Operation jtry5(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S5(this)); }
+    public Operation jtry6(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S6(this)); }
+    public Operation jtry7(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S7(this)); }
+    public Operation jtry8(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+    public Operation jtry9(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+    public Operation jtry10(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+
     /** Creates a new choice point frame. */
-    public Operation jtry(Operation p, Operation next, ChoicePointFrame entry) {
+    private Operation jtry(Operation p, Operation next, ChoicePointFrame entry) {
       entry.cont = cont;
       entry.b0 = B0;
       entry.bp = next;
