diff --git a/src/builtin/PRED_$call_2.java b/src/builtin/PRED_$call_2.java
index 32d3904..b9ace54 100644
--- a/src/builtin/PRED_$call_2.java
+++ b/src/builtin/PRED_$call_2.java
@@ -53,10 +53,11 @@
 		    if ((engine.getUnknown()).equals("fail"))
 			return engine.fail();
 
-		    Term[] fa = {SymbolTerm.makeSymbol(functor), new IntegerTerm(arity)};
-		    Term[] r = {a1, new StructureTerm(SYM_SLASH_2, fa)};
-		    Term what = new StructureTerm(SYM_COLON_2, r);
-
+		    Term what = new StructureTerm(SYM_COLON_2,
+		       a1,
+		       new StructureTerm(SYM_SLASH_2,
+		         SymbolTerm.makeSymbol(functor),
+		         new IntegerTerm(arity)));
 		    ExistenceException err = new ExistenceException(this, 0, "procedure", what, e.getMessage());
 		    err.initCause(e);
 		    throw err;
diff --git a/src/builtin/PRED_$get_instances_2.java b/src/builtin/PRED_$get_instances_2.java
index 4d778cf..2873e9b 100644
--- a/src/builtin/PRED_$get_instances_2.java
+++ b/src/builtin/PRED_$get_instances_2.java
@@ -41,17 +41,8 @@
 	    int i = ((IntegerTerm)car).intValue();
 	    Term e = engine.internalDB.get(i);
 	    if (e != null) {
-		Term[] arg = {e, car};
-		x = new ListTerm(new StructureTerm(COMMA, arg), x);
-	    } 
-	    //	    else {
-	    //		System.out.println("index " + i + " is deleted.");
-	    //	    }
-
-	    //	    if (e == null)
-	    //		throw new SystemException("invalid index");
-	    //	    Term[] arg = {e, car};
-	    //	    x = new ListTerm(new StructureTerm(COMMA, arg), x);
+		x = new ListTerm(new StructureTerm(COMMA, e, car), x);
+	    }
 	    tmp = ((ListTerm)tmp).cdr().dereference();
 	}
 	if (! a2.unify(x, engine.trail))
diff --git a/src/builtin/PRED_atom_concat_3.java b/src/builtin/PRED_atom_concat_3.java
index 48f5875..77e4dec 100644
--- a/src/builtin/PRED_atom_concat_3.java
+++ b/src/builtin/PRED_atom_concat_3.java
@@ -33,8 +33,7 @@
 			       SymbolTerm.makeSymbol(str3.substring(i, endIndex))};
 		t = new ListTerm(new StructureTerm(AC_2, args), t);
 	    }
-	    Term[] args12 = {a1,a2};
-	    return new PRED_$member_in_reverse_2(new StructureTerm(AC_2, args12), t, cont);
+	    return new PRED_$member_in_reverse_2(new StructureTerm(AC_2, a1, a2), t, cont);
 	} else if (! a3.isVariable()) {
 	    throw new IllegalTypeException(this, 3, "atom", a3);
 	}
diff --git a/src/builtin/PRED_open_4.java b/src/builtin/PRED_open_4.java
index f4a2c88..24e482c 100644
--- a/src/builtin/PRED_open_4.java
+++ b/src/builtin/PRED_open_4.java
@@ -111,16 +111,12 @@
 	    }
 	    tmp = ((ListTerm) tmp).cdr().dereference();
 	}
-	Term[] args1 = {SYM_TEXT};
-	Term[] args2 = {a2};
-	Term[] args3 = {SymbolTerm.makeSymbol(file.getAbsolutePath())};
-	opts = new ListTerm(new StructureTerm(SYM_TYPE_1, args1), opts);
-	opts = new ListTerm(new StructureTerm(SYM_MODE_1, args2), opts);
-	opts = new ListTerm(new StructureTerm(SYM_FILE_NAME_1, args3), opts);
+	opts = new ListTerm(new StructureTerm(SYM_TYPE_1, SYM_TEXT), opts);
+	opts = new ListTerm(new StructureTerm(SYM_MODE_1, a2), opts);
+	opts = new ListTerm(new StructureTerm(SYM_FILE_NAME_1, SymbolTerm.makeSymbol(file.getAbsolutePath())), opts);
 	if (alias != null) {
 	    engine.getStreamManager().put(alias, streamObject);
-	    Term[] as = {alias};
-	    opts = new ListTerm(new StructureTerm(SYM_ALIAS_1, as), opts);
+	    opts = new ListTerm(new StructureTerm(SYM_ALIAS_1, alias), opts);
 	}
 	((VariableTerm)a3).bind(streamObject, engine.trail);
 	engine.getStreamManager().put(streamObject, opts);
diff --git a/src/lang/StructureTerm.java b/src/lang/StructureTerm.java
index 354a66b..ef806cf 100644
--- a/src/lang/StructureTerm.java
+++ b/src/lang/StructureTerm.java
@@ -35,7 +35,7 @@
      * such that <code>_functor</code> is the functor symbol, and 
      * <code>_args</code> is the argument terms respectively.
      */
-    public StructureTerm(SymbolTerm _functor, Term[] _args){
+    public StructureTerm(SymbolTerm _functor, Term... _args){
 	functor = _functor;
 	arity = functor.arity();
 	args = _args;
