diff --git a/src/lang/InternalDatabase.java b/src/lang/InternalDatabase.java
index a70862a..13676d0 100644
--- a/src/lang/InternalDatabase.java
+++ b/src/lang/InternalDatabase.java
@@ -9,8 +9,10 @@
  * @version 1.1
  */
 public class InternalDatabase implements Serializable {
+    protected static final int DEFAULT_SIZE = 100000;
+
     /** Maximum size of enties. Initial size is <code>100000</code>. */
-    protected int maxContents = 100000;
+    protected int maxContents;
 
     /** An array of <code>Term</code> entries. */
     protected Term[] buffer;
@@ -24,14 +26,13 @@
 
     /** Constructs a new internal dababase. */
     public InternalDatabase() {
-	buffer = new Term[maxContents];
-	top = -1;
+	this(DEFAULT_SIZE);
     }
 
     /** Constructs a new internal dababase with the given size. */
     public InternalDatabase(int n) {
 	maxContents = n;
-	buffer = new Term[maxContents];
+	buffer = new Term[Math.min(maxContents, DEFAULT_SIZE)];
 	top = -1;
     }
 
@@ -51,15 +52,15 @@
 		return i;
 	    }
 	} catch (ArrayIndexOutOfBoundsException e) {
-	    System.out.println("{expanding internal database...}");
+	    if (maxContents == buffer.length)
+	      throw new SystemException("internal database capacity reached");
 	    int len = buffer.length;
-	    Term[] new_buffer = new Term[len+10000];
+	    Term[] new_buffer = new Term[Math.min(len+10000, maxContents)];
 	    for(int i=0; i<len; i++){
 		new_buffer[i] = buffer[i];
 	    }
 	    buffer = new_buffer;
 	    buffer[top] = t;
-	    maxContents = len+20000;
 	    return top;
 	}
     }
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java
index 4388e32..f9b3d5e 100644
--- a/src/lang/Prolog.java
+++ b/src/lang/Prolog.java
@@ -117,7 +117,6 @@
 	trail      = new Trail(this);
 	//	pdl        = new PushDownList();
 	pcl        = new PrologClassLoader();
-	internalDB = new InternalDatabase();
     }
 
     /** 
@@ -135,6 +134,9 @@
      */
     protected void initOnce() {
 	aregs      = new Term[maxArity];
+	if (internalDB == null)
+	  internalDB = new InternalDatabase();
+
 	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);
diff --git a/src/lang/PrologControl.java b/src/lang/PrologControl.java
index 564a46e..875c096 100644
--- a/src/lang/PrologControl.java
+++ b/src/lang/PrologControl.java
@@ -32,6 +32,17 @@
     public boolean getEnableReflection() { return enableReflection; }
     public void setEnableReflection(boolean on) { enableReflection = on; }
 
+    public int getMaxDatabaseSize() {
+      if (engine.internalDB != null)
+        return engine.internalDB.maxContents;
+      return InternalDatabase.DEFAULT_SIZE;
+    }
+    public void setMaxDatabaseSize(int size) {
+      if (engine.aregs != null)
+        throw new IllegalStateException("Prolog already initialized");
+      engine.internalDB = new InternalDatabase(size);
+    }
+
     public int getMaxArity() { return engine.getMaxArity(); }
     public void setMaxArity(int max) {
       if (max < 8)
