Move exception types to their own package

This shrinks the size of the lang package leaving it for the
type system and the virtual machine. Moving exceptions out
to their own package mirrors similar approach inside JGit.

Change-Id: I7bf1504e15d51efe21d100854d245f54f567b23a
diff --git a/BUCK b/BUCK
index a82bf42..07eb695 100644
--- a/BUCK
+++ b/BUCK
@@ -34,7 +34,11 @@
 
 java_library(
   name = 'lang',
-  srcs = glob([SRC + 'lang/*.java'], excludes = REPL),
+  srcs = glob([
+      SRC + 'exceptions/*.java',
+      SRC + 'lang/*.java',
+    ],
+    excludes = REPL),
 )
 
 java_library(
diff --git a/src/builtin/PRED_$begin_exception_1.java b/src/builtin/PRED_$begin_exception_1.java
index 966e0cd..c4583fe 100644
--- a/src/builtin/PRED_$begin_exception_1.java
+++ b/src/builtin/PRED_$begin_exception_1.java
@@ -1,4 +1,6 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>'$begin_exception'/1</code><br>
diff --git a/src/builtin/PRED_$call_2.java b/src/builtin/PRED_$call_2.java
index bad81e4..99d960a 100644
--- a/src/builtin/PRED_$call_2.java
+++ b/src/builtin/PRED_$call_2.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.SystemException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.lang.reflect.*;
 /**
diff --git a/src/builtin/PRED_$cut_1.java b/src/builtin/PRED_$cut_1.java
index 97aa8eb..ba759e5 100644
--- a/src/builtin/PRED_$cut_1.java
+++ b/src/builtin/PRED_$cut_1.java
@@ -1,4 +1,5 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
  <code>'$cut'/1</code><br>
diff --git a/src/builtin/PRED_$end_exception_1.java b/src/builtin/PRED_$end_exception_1.java
index a73afdb..9793c29 100644
--- a/src/builtin/PRED_$end_exception_1.java
+++ b/src/builtin/PRED_$end_exception_1.java
@@ -1,4 +1,6 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.SystemException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>'$end_exception'/1<code><br>
diff --git a/src/builtin/PRED_$erase_1.java b/src/builtin/PRED_$erase_1.java
index 4416452..5b68f24 100644
--- a/src/builtin/PRED_$erase_1.java
+++ b/src/builtin/PRED_$erase_1.java
@@ -1,4 +1,5 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>'$erase'/1</code><br>
diff --git a/src/builtin/PRED_$fast_write_2.java b/src/builtin/PRED_$fast_write_2.java
index 80b9b45..a86fa8a 100644
--- a/src/builtin/PRED_$fast_write_2.java
+++ b/src/builtin/PRED_$fast_write_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.io.PrintWriter;
 /**
diff --git a/src/builtin/PRED_$fast_writeq_2.java b/src/builtin/PRED_$fast_writeq_2.java
index f62f799..7b83a69 100644
--- a/src/builtin/PRED_$fast_writeq_2.java
+++ b/src/builtin/PRED_$fast_writeq_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.io.PrintWriter;
 /**
diff --git a/src/builtin/PRED_$get_hash_manager_1.java b/src/builtin/PRED_$get_hash_manager_1.java
index a16ed62..1dbcdd7 100644
--- a/src/builtin/PRED_$get_hash_manager_1.java
+++ b/src/builtin/PRED_$get_hash_manager_1.java
@@ -1,4 +1,5 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
    <code>'$get_hash_manager'/1</code><br>
diff --git a/src/builtin/PRED_$get_instances_2.java b/src/builtin/PRED_$get_instances_2.java
index 9a5f8ee..464daf5 100644
--- a/src/builtin/PRED_$get_instances_2.java
+++ b/src/builtin/PRED_$get_instances_2.java
@@ -1,4 +1,7 @@
 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.exceptions.RepresentationException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
    <code>'$get_instances'/2</code><br>
diff --git a/src/builtin/PRED_$hash_adda_3.java b/src/builtin/PRED_$hash_adda_3.java
index 94fea66..f915af6 100644
--- a/src/builtin/PRED_$hash_adda_3.java
+++ b/src/builtin/PRED_$hash_adda_3.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_$hash_addz_3.java b/src/builtin/PRED_$hash_addz_3.java
index ae89ca1..a43d946 100644
--- a/src/builtin/PRED_$hash_addz_3.java
+++ b/src/builtin/PRED_$hash_addz_3.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_$hash_remove_first_3.java b/src/builtin/PRED_$hash_remove_first_3.java
index 4639899..5cf03ec 100644
--- a/src/builtin/PRED_$hash_remove_first_3.java
+++ b/src/builtin/PRED_$hash_remove_first_3.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_$insert_2.java b/src/builtin/PRED_$insert_2.java
index cf07e2b..47186cb 100644
--- a/src/builtin/PRED_$insert_2.java
+++ b/src/builtin/PRED_$insert_2.java
@@ -1,4 +1,5 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
    <code>'$insert'/2</code><br>
diff --git a/src/builtin/PRED_$read_token0_3.java b/src/builtin/PRED_$read_token0_3.java
index 9e4c8bc..f5d473e 100644
--- a/src/builtin/PRED_$read_token0_3.java
+++ b/src/builtin/PRED_$read_token0_3.java
@@ -1,4 +1,9 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_$statistics_2.java b/src/builtin/PRED_$statistics_2.java
index ab1778f..6d8b75c 100644
--- a/src/builtin/PRED_$statistics_2.java
+++ b/src/builtin/PRED_$statistics_2.java
@@ -1,4 +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.*;
 /**
    <code>'$statistics'/2</code><br>
diff --git a/src/builtin/PRED_$univ_2.java b/src/builtin/PRED_$univ_2.java
index 4483e95..5bad417 100644
--- a/src/builtin/PRED_$univ_2.java
+++ b/src/builtin/PRED_$univ_2.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
    <code>'$univ'/2</code><br>
diff --git a/src/builtin/PRED_$write_toString_2.java b/src/builtin/PRED_$write_toString_2.java
index 7d7f596..d45fff2 100644
--- a/src/builtin/PRED_$write_toString_2.java
+++ b/src/builtin/PRED_$write_toString_2.java
@@ -1,4 +1,9 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.io.PrintWriter;
 /**
diff --git a/src/builtin/PRED_arg_3.java b/src/builtin/PRED_arg_3.java
index 64d8318..ddcdb22 100644
--- a/src/builtin/PRED_arg_3.java
+++ b/src/builtin/PRED_arg_3.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>arg/3</code><br>
diff --git a/src/builtin/PRED_atom_chars_2.java b/src/builtin/PRED_atom_chars_2.java
index 240bde6..ad34f50 100644
--- a/src/builtin/PRED_atom_chars_2.java
+++ b/src/builtin/PRED_atom_chars_2.java
@@ -1,4 +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.*;
 /**
  * <code>atom_chars/2</code><br>
diff --git a/src/builtin/PRED_atom_codes_2.java b/src/builtin/PRED_atom_codes_2.java
index 19cd473..bbb7bb1 100644
--- a/src/builtin/PRED_atom_codes_2.java
+++ b/src/builtin/PRED_atom_codes_2.java
@@ -1,4 +1,7 @@
 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.exceptions.RepresentationException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>atom_codes/2</code><br>
diff --git a/src/builtin/PRED_atom_concat_3.java b/src/builtin/PRED_atom_concat_3.java
index a12d54a..0e1ebda 100644
--- a/src/builtin/PRED_atom_concat_3.java
+++ b/src/builtin/PRED_atom_concat_3.java
@@ -1,4 +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.*;
 /**
  * <code>atom_concat/3</code><br>
diff --git a/src/builtin/PRED_atom_length_2.java b/src/builtin/PRED_atom_length_2.java
index 390289e..4a45e28 100644
--- a/src/builtin/PRED_atom_length_2.java
+++ b/src/builtin/PRED_atom_length_2.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>atom_lengt/2</code><br>
diff --git a/src/builtin/PRED_char_code_2.java b/src/builtin/PRED_char_code_2.java
index 5762d2b..a441b02 100644
--- a/src/builtin/PRED_char_code_2.java
+++ b/src/builtin/PRED_char_code_2.java
@@ -1,4 +1,7 @@
 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.exceptions.RepresentationException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>char_code/2</code><br>
diff --git a/src/builtin/PRED_close_2.java b/src/builtin/PRED_close_2.java
index 855d9e3..9f9af56 100644
--- a/src/builtin/PRED_close_2.java
+++ b/src/builtin/PRED_close_2.java
@@ -3,21 +3,21 @@
 import java.io.PrintWriter;
 import java.io.PushbackReader;
 
-import com.googlecode.prolog_cafe.lang.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.SystemException;
+import com.googlecode.prolog_cafe.exceptions.TermException;
 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)
diff --git a/src/builtin/PRED_flush_output_1.java b/src/builtin/PRED_flush_output_1.java
index 3e89d74..41c7909 100644
--- a/src/builtin/PRED_flush_output_1.java
+++ b/src/builtin/PRED_flush_output_1.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.PrintWriter;
 /**
diff --git a/src/builtin/PRED_functor_3.java b/src/builtin/PRED_functor_3.java
index d9b1466..55fd722 100644
--- a/src/builtin/PRED_functor_3.java
+++ b/src/builtin/PRED_functor_3.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>functor/3</code><br>
diff --git a/src/builtin/PRED_get_2.java b/src/builtin/PRED_get_2.java
index b82f122..6ebcd2f 100644
--- a/src/builtin/PRED_get_2.java
+++ b/src/builtin/PRED_get_2.java
@@ -1,4 +1,11 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.RepresentationException;
+import com.googlecode.prolog_cafe.exceptions.TermException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_get_char_2.java b/src/builtin/PRED_get_char_2.java
index c6509df..538d756 100644
--- a/src/builtin/PRED_get_char_2.java
+++ b/src/builtin/PRED_get_char_2.java
@@ -1,4 +1,11 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.RepresentationException;
+import com.googlecode.prolog_cafe.exceptions.TermException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_halt_1.java b/src/builtin/PRED_halt_1.java
index 0290a54..da0f691 100644
--- a/src/builtin/PRED_halt_1.java
+++ b/src/builtin/PRED_halt_1.java
@@ -1,4 +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.*;
 /**
  * <code>halt/1</code><br>
diff --git a/src/builtin/PRED_hash_clear_1.java b/src/builtin/PRED_hash_clear_1.java
index 7c98e53..5c7b437 100644
--- a/src/builtin/PRED_hash_clear_1.java
+++ b/src/builtin/PRED_hash_clear_1.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_contains_key_2.java b/src/builtin/PRED_hash_contains_key_2.java
index b16fafc..dad9c71 100644
--- a/src/builtin/PRED_hash_contains_key_2.java
+++ b/src/builtin/PRED_hash_contains_key_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_get_3.java b/src/builtin/PRED_hash_get_3.java
index ecbfa88..1e01a2f 100644
--- a/src/builtin/PRED_hash_get_3.java
+++ b/src/builtin/PRED_hash_get_3.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_is_empty_1.java b/src/builtin/PRED_hash_is_empty_1.java
index 5e7d1fb..6ba3c8f 100644
--- a/src/builtin/PRED_hash_is_empty_1.java
+++ b/src/builtin/PRED_hash_is_empty_1.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_keys_2.java b/src/builtin/PRED_hash_keys_2.java
index 7d365b7..dfb34c6 100644
--- a/src/builtin/PRED_hash_keys_2.java
+++ b/src/builtin/PRED_hash_keys_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 import java.util.Enumeration;
diff --git a/src/builtin/PRED_hash_put_3.java b/src/builtin/PRED_hash_put_3.java
index e3a47ae..51d73c9 100644
--- a/src/builtin/PRED_hash_put_3.java
+++ b/src/builtin/PRED_hash_put_3.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_remove_2.java b/src/builtin/PRED_hash_remove_2.java
index 1c33571..7ab2613 100644
--- a/src/builtin/PRED_hash_remove_2.java
+++ b/src/builtin/PRED_hash_remove_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_hash_size_2.java b/src/builtin/PRED_hash_size_2.java
index 39e2d63..e1fe6c1 100644
--- a/src/builtin/PRED_hash_size_2.java
+++ b/src/builtin/PRED_hash_size_2.java
@@ -1,4 +1,9 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Hashtable;
 /**
diff --git a/src/builtin/PRED_keysort_2.java b/src/builtin/PRED_keysort_2.java
index abef82f..c2ab4fe 100644
--- a/src/builtin/PRED_keysort_2.java
+++ b/src/builtin/PRED_keysort_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.BuiltinException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Arrays;
 /**
diff --git a/src/builtin/PRED_new_hash_2.java b/src/builtin/PRED_new_hash_2.java
index 8fbbdb3..467458f 100644
--- a/src/builtin/PRED_new_hash_2.java
+++ b/src/builtin/PRED_new_hash_2.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import com.googlecode.prolog_cafe.lang.*;
 /**
    <code>new_hash/2</code><br>
diff --git a/src/builtin/PRED_number_chars_2.java b/src/builtin/PRED_number_chars_2.java
index 75899c4..56700c4 100644
--- a/src/builtin/PRED_number_chars_2.java
+++ b/src/builtin/PRED_number_chars_2.java
@@ -1,4 +1,7 @@
 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.exceptions.SyntaxException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>number_chars/2</code><br>
diff --git a/src/builtin/PRED_number_codes_2.java b/src/builtin/PRED_number_codes_2.java
index 0c6437e..c5c6722 100644
--- a/src/builtin/PRED_number_codes_2.java
+++ b/src/builtin/PRED_number_codes_2.java
@@ -1,4 +1,8 @@
 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.exceptions.RepresentationException;
+import com.googlecode.prolog_cafe.exceptions.SyntaxException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>number_codes/2</code><br>
diff --git a/src/builtin/PRED_open_4.java b/src/builtin/PRED_open_4.java
index 8f3f6ec..3d1b25d 100644
--- a/src/builtin/PRED_open_4.java
+++ b/src/builtin/PRED_open_4.java
@@ -1,4 +1,10 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_put_char_2.java b/src/builtin/PRED_put_char_2.java
index 478b500..950dc29 100644
--- a/src/builtin/PRED_put_char_2.java
+++ b/src/builtin/PRED_put_char_2.java
@@ -1,4 +1,10 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.RepresentationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_put_code_2.java b/src/builtin/PRED_put_code_2.java
index d836f6d..4897883 100644
--- a/src/builtin/PRED_put_code_2.java
+++ b/src/builtin/PRED_put_code_2.java
@@ -1,4 +1,10 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.RepresentationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_raise_exception_1.java b/src/builtin/PRED_raise_exception_1.java
index 005b5c6..7bd37e7 100644
--- a/src/builtin/PRED_raise_exception_1.java
+++ b/src/builtin/PRED_raise_exception_1.java
@@ -1,4 +1,6 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.TermException;
 import  com.googlecode.prolog_cafe.lang.*;
 /**
  * <code>raise_exception/1</code><br>
diff --git a/src/builtin/PRED_read_line_2.java b/src/builtin/PRED_read_line_2.java
index b13e96f..bc2d2cd 100644
--- a/src/builtin/PRED_read_line_2.java
+++ b/src/builtin/PRED_read_line_2.java
@@ -1,4 +1,10 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.RepresentationException;
+import com.googlecode.prolog_cafe.exceptions.TermException;
 import  com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/builtin/PRED_regex_compile_2.java b/src/builtin/PRED_regex_compile_2.java
index 5c4ef37..26b7509 100644
--- a/src/builtin/PRED_regex_compile_2.java
+++ b/src/builtin/PRED_regex_compile_2.java
@@ -1,8 +1,8 @@
 package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
 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.SymbolTerm;
diff --git a/src/builtin/PRED_regex_match_3.java b/src/builtin/PRED_regex_match_3.java
index 830d787..0da77c9 100644
--- a/src/builtin/PRED_regex_match_3.java
+++ b/src/builtin/PRED_regex_match_3.java
@@ -1,9 +1,9 @@
 package com.googlecode.prolog_cafe.builtin;
-import com.googlecode.prolog_cafe.lang.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 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.SymbolTerm;
diff --git a/src/builtin/PRED_sort_2.java b/src/builtin/PRED_sort_2.java
index 162f79f..8325b97 100644
--- a/src/builtin/PRED_sort_2.java
+++ b/src/builtin/PRED_sort_2.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.util.Arrays;
 /**
diff --git a/src/builtin/PRED_tab_2.java b/src/builtin/PRED_tab_2.java
index 65acb2b..ec58a1b 100644
--- a/src/builtin/PRED_tab_2.java
+++ b/src/builtin/PRED_tab_2.java
@@ -1,4 +1,9 @@
 package com.googlecode.prolog_cafe.builtin;
+import com.googlecode.prolog_cafe.exceptions.BuiltinException;
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
 import com.googlecode.prolog_cafe.lang.*;
 import java.io.*;
 /**
diff --git a/src/compiler/Compiler.java b/src/compiler/Compiler.java
index dbc2839..5820745 100644
--- a/src/compiler/Compiler.java
+++ b/src/compiler/Compiler.java
@@ -1,10 +1,10 @@
 package com.googlecode.prolog_cafe.compiler;
+import com.googlecode.prolog_cafe.exceptions.CompileException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.BufferingPrologControl;
-import com.googlecode.prolog_cafe.lang.CompileException;
 import com.googlecode.prolog_cafe.lang.ListTerm;
 import com.googlecode.prolog_cafe.lang.Prolog;
 import com.googlecode.prolog_cafe.lang.PrologClassLoader;
-import com.googlecode.prolog_cafe.lang.PrologException;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
diff --git a/src/compiler/am2j/PRED_exists_directory_1.java b/src/compiler/am2j/PRED_exists_directory_1.java
index e655d65..87737f1 100644
--- a/src/compiler/am2j/PRED_exists_directory_1.java
+++ b/src/compiler/am2j/PRED_exists_directory_1.java
@@ -1,11 +1,11 @@
 package com.googlecode.prolog_cafe.compiler.am2j;
 
-import com.googlecode.prolog_cafe.lang.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 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.PrologException;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
diff --git a/src/compiler/am2j/PRED_file_directory_name_2.java b/src/compiler/am2j/PRED_file_directory_name_2.java
index 3d255f5..46f00ba 100644
--- a/src/compiler/am2j/PRED_file_directory_name_2.java
+++ b/src/compiler/am2j/PRED_file_directory_name_2.java
@@ -1,12 +1,12 @@
 package com.googlecode.prolog_cafe.compiler.am2j;
 
-import com.googlecode.prolog_cafe.lang.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.Operation;
-import com.googlecode.prolog_cafe.lang.PInstantiationException;
-import com.googlecode.prolog_cafe.lang.PermissionException;
 import com.googlecode.prolog_cafe.lang.Predicate;
 import com.googlecode.prolog_cafe.lang.Prolog;
-import com.googlecode.prolog_cafe.lang.PrologException;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
diff --git a/src/compiler/am2j/PRED_make_directory_1.java b/src/compiler/am2j/PRED_make_directory_1.java
index 7148696..ed511e3 100644
--- a/src/compiler/am2j/PRED_make_directory_1.java
+++ b/src/compiler/am2j/PRED_make_directory_1.java
@@ -1,12 +1,12 @@
 package com.googlecode.prolog_cafe.compiler.am2j;
 
-import com.googlecode.prolog_cafe.lang.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.Operation;
-import com.googlecode.prolog_cafe.lang.PInstantiationException;
-import com.googlecode.prolog_cafe.lang.PermissionException;
 import com.googlecode.prolog_cafe.lang.Predicate;
 import com.googlecode.prolog_cafe.lang.Prolog;
-import com.googlecode.prolog_cafe.lang.PrologException;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
diff --git a/src/compiler/pl2am.pl b/src/compiler/pl2am.pl
index f588822..118d5d1 100644
--- a/src/compiler/pl2am.pl
+++ b/src/compiler/pl2am.pl
@@ -247,8 +247,9 @@
 
 %%% Post-init
 pl2am_postread :- 
-	assert_import('com.googlecode.prolog_cafe.lang'),
 	assert_import('com.googlecode.prolog_cafe.builtin'),
+	assert_import('com.googlecode.prolog_cafe.exceptions'),
+	assert_import('com.googlecode.prolog_cafe.lang'),
 	assert_dummy_package,
 	assert_dummy_public.
 
diff --git a/src/lang/BuiltinException.java b/src/exceptions/BuiltinException.java
similarity index 83%
rename from src/lang/BuiltinException.java
rename to src/exceptions/BuiltinException.java
index 07e44d5..e025454 100644
--- a/src/lang/BuiltinException.java
+++ b/src/exceptions/BuiltinException.java
@@ -1,4 +1,8 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Builtin exception.<br>
  *
diff --git a/src/lang/CompileException.java b/src/exceptions/CompileException.java
similarity index 87%
rename from src/lang/CompileException.java
rename to src/exceptions/CompileException.java
index 6cc899b..9aa9cf4 100644
--- a/src/lang/CompileException.java
+++ b/src/exceptions/CompileException.java
@@ -1,4 +1,4 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
 
 /** Indicates compiling did not succeed. */
 public class CompileException extends Exception {
diff --git a/src/lang/EvaluationException.java b/src/exceptions/EvaluationException.java
similarity index 82%
rename from src/lang/EvaluationException.java
rename to src/exceptions/EvaluationException.java
index f3d8bda..72a07fb 100644
--- a/src/lang/EvaluationException.java
+++ b/src/exceptions/EvaluationException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Evaluation error.<br>
  * There will be an evaluation error when the operands
diff --git a/src/lang/ExistenceException.java b/src/exceptions/ExistenceException.java
similarity index 85%
rename from src/lang/ExistenceException.java
rename to src/exceptions/ExistenceException.java
index 6a7a672..4c1b843 100644
--- a/src/lang/ExistenceException.java
+++ b/src/exceptions/ExistenceException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Existence error.<br>
  * There will be an existence error when the object
diff --git a/src/lang/HaltException.java b/src/exceptions/HaltException.java
similarity index 83%
rename from src/lang/HaltException.java
rename to src/exceptions/HaltException.java
index 5dbd4ef..c10f8e9 100644
--- a/src/lang/HaltException.java
+++ b/src/exceptions/HaltException.java
@@ -1,4 +1,4 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
 
 public class HaltException extends SystemException {
   private final int status;
diff --git a/src/lang/IllegalDomainException.java b/src/exceptions/IllegalDomainException.java
similarity index 86%
rename from src/lang/IllegalDomainException.java
rename to src/exceptions/IllegalDomainException.java
index 7edd75d..c0d72f6 100644
--- a/src/lang/IllegalDomainException.java
+++ b/src/exceptions/IllegalDomainException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Domain error.<br>
  * There will be a domain error when the type of an argument
diff --git a/src/lang/IllegalTypeException.java b/src/exceptions/IllegalTypeException.java
similarity index 84%
rename from src/lang/IllegalTypeException.java
rename to src/exceptions/IllegalTypeException.java
index d6fff68..3ecfe93 100644
--- a/src/lang/IllegalTypeException.java
+++ b/src/exceptions/IllegalTypeException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Type error.<br>
  * There will be a type error when the type of an argument or 
diff --git a/src/lang/InternalException.java b/src/exceptions/InternalException.java
similarity index 83%
rename from src/lang/InternalException.java
rename to src/exceptions/InternalException.java
index ab08b0b..9ce9495 100644
--- a/src/lang/InternalException.java
+++ b/src/exceptions/InternalException.java
@@ -1,4 +1,9 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Internal error.<br>
  *
diff --git a/src/lang/JavaException.java b/src/exceptions/JavaException.java
similarity index 82%
rename from src/lang/JavaException.java
rename to src/exceptions/JavaException.java
index a0f1e2e..6d0b347 100644
--- a/src/lang/JavaException.java
+++ b/src/exceptions/JavaException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Java error.<br>
  * There will be a Java error when 
diff --git a/src/lang/PInstantiationException.java b/src/exceptions/PInstantiationException.java
similarity index 79%
rename from src/lang/PInstantiationException.java
rename to src/exceptions/PInstantiationException.java
index 203d1b3..e190520 100644
--- a/src/lang/PInstantiationException.java
+++ b/src/exceptions/PInstantiationException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Instantiation error.<br>
  * There will be an instantiation error 
diff --git a/src/lang/PermissionException.java b/src/exceptions/PermissionException.java
similarity index 87%
rename from src/lang/PermissionException.java
rename to src/exceptions/PermissionException.java
index c053386..e7ad609 100644
--- a/src/lang/PermissionException.java
+++ b/src/exceptions/PermissionException.java
@@ -1,4 +1,11 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Permission error.<br>
  * There will be a permission error when it is not permitted
diff --git a/src/lang/PrologException.java b/src/exceptions/PrologException.java
similarity index 83%
rename from src/lang/PrologException.java
rename to src/exceptions/PrologException.java
index 0af28c5..cc0cf67 100644
--- a/src/lang/PrologException.java
+++ b/src/exceptions/PrologException.java
@@ -1,4 +1,7 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * The superclass of classes for Prolog exceptions.<br>
  *
diff --git a/src/lang/RepresentationException.java b/src/exceptions/RepresentationException.java
similarity index 82%
rename from src/lang/RepresentationException.java
rename to src/exceptions/RepresentationException.java
index 9f513d6..320f277 100644
--- a/src/lang/RepresentationException.java
+++ b/src/exceptions/RepresentationException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Representation error.<br>
  * There will be a representation error when an implementation
diff --git a/src/lang/SyntaxException.java b/src/exceptions/SyntaxException.java
similarity index 84%
rename from src/lang/SyntaxException.java
rename to src/exceptions/SyntaxException.java
index 2d22ce3..8912f34 100644
--- a/src/lang/SyntaxException.java
+++ b/src/exceptions/SyntaxException.java
@@ -1,4 +1,12 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * Syntax error.<br>
  * There will be a syntax error when a sequence of characters
diff --git a/src/lang/SystemException.java b/src/exceptions/SystemException.java
similarity index 83%
rename from src/lang/SystemException.java
rename to src/exceptions/SystemException.java
index 788b2db..4689a86 100644
--- a/src/lang/SystemException.java
+++ b/src/exceptions/SystemException.java
@@ -1,4 +1,9 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * System error.<br>
  *
diff --git a/src/lang/TermException.java b/src/exceptions/TermException.java
similarity index 87%
rename from src/lang/TermException.java
rename to src/exceptions/TermException.java
index e98db48..b95d4e2 100644
--- a/src/lang/TermException.java
+++ b/src/exceptions/TermException.java
@@ -1,4 +1,7 @@
-package com.googlecode.prolog_cafe.lang;
+package com.googlecode.prolog_cafe.exceptions;
+
+import com.googlecode.prolog_cafe.lang.Term;
+
 /**
  * User-defined exception.<br>
  *
diff --git a/src/lang/Arithmetic.java b/src/lang/Arithmetic.java
index f74591e..a8923f8 100644
--- a/src/lang/Arithmetic.java
+++ b/src/lang/Arithmetic.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
+import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
+
 /**
  * The <code>Arithmetic</code> class contains a method
  * for evaluating arithmetic expressions.<br>
diff --git a/src/lang/DoubleTerm.java b/src/lang/DoubleTerm.java
index f387213..62c24e8 100644
--- a/src/lang/DoubleTerm.java
+++ b/src/lang/DoubleTerm.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.EvaluationException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+
 /**
  * Floating point number.
  * The class <code>DoubleTerm</code> wraps a value of 
diff --git a/src/lang/Failure.java b/src/lang/Failure.java
index e8001ae..15c3c04 100644
--- a/src/lang/Failure.java
+++ b/src/lang/Failure.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.PrologException;
+
 /**
  * Initial backtrak point.<br>
  *
diff --git a/src/lang/IntegerTerm.java b/src/lang/IntegerTerm.java
index 8aebbd8..15a5e4a 100644
--- a/src/lang/IntegerTerm.java
+++ b/src/lang/IntegerTerm.java
@@ -1,4 +1,8 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.EvaluationException;
+import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+
 /**
  * Integer.<br>
  * The class <code>IntegerTerm</code> wraps a value of primitive type 
diff --git a/src/lang/InternalDatabase.java b/src/lang/InternalDatabase.java
index 663383f..cb55888 100644
--- a/src/lang/InternalDatabase.java
+++ b/src/lang/InternalDatabase.java
@@ -1,4 +1,6 @@
 package com.googlecode.prolog_cafe.lang;
+import com.googlecode.prolog_cafe.exceptions.SystemException;
+
 import java.util.LinkedList;
 /**
  * Internal database for dynamic predicates.<br>
diff --git a/src/lang/Operation.java b/src/lang/Operation.java
index 3495b6b..ebe4e41 100644
--- a/src/lang/Operation.java
+++ b/src/lang/Operation.java
@@ -1,5 +1,7 @@
 package com.googlecode.prolog_cafe.lang;
 
+import com.googlecode.prolog_cafe.exceptions.PrologException;
+
 /**
  * Superclass any single step operation in the Prolog interpreter.
  * <p>
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java
index 23e9755..9b4237e 100644
--- a/src/lang/Prolog.java
+++ b/src/lang/Prolog.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.lang;
+import com.googlecode.prolog_cafe.exceptions.PermissionException;
+import com.googlecode.prolog_cafe.exceptions.SystemException;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.IOException;
diff --git a/src/lang/PrologClassLoader.java b/src/lang/PrologClassLoader.java
index a6625e9..367da97 100644
--- a/src/lang/PrologClassLoader.java
+++ b/src/lang/PrologClassLoader.java
@@ -1,6 +1,9 @@
 package com.googlecode.prolog_cafe.lang;
 
 import static com.googlecode.prolog_cafe.lang.PredicateEncoder.encode;
+
+import com.googlecode.prolog_cafe.exceptions.ExistenceException;
+
 import java.lang.reflect.Constructor;
 import java.util.concurrent.ConcurrentHashMap;
 
diff --git a/src/lang/PrologControl.java b/src/lang/PrologControl.java
index 28dacf5..fe36ef2 100644
--- a/src/lang/PrologControl.java
+++ b/src/lang/PrologControl.java
@@ -1,5 +1,8 @@
 package com.googlecode.prolog_cafe.lang;
 
+import com.googlecode.prolog_cafe.exceptions.HaltException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
+
 import java.util.Set;
 
 /**
diff --git a/src/lang/StructureTerm.java b/src/lang/StructureTerm.java
index 85a91a6..dd50b01 100644
--- a/src/lang/StructureTerm.java
+++ b/src/lang/StructureTerm.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+
 /**
  * Compound term. <br>
  * The <code>StructureTerm</code> class represents a compound term but list.<br>
diff --git a/src/lang/SymbolTerm.java b/src/lang/SymbolTerm.java
index 9a25b34..1725ea6 100644
--- a/src/lang/SymbolTerm.java
+++ b/src/lang/SymbolTerm.java
@@ -1,4 +1,6 @@
 package com.googlecode.prolog_cafe.lang;
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+
 import java.lang.ref.Reference;
 import java.lang.ref.ReferenceQueue;
 import java.lang.ref.WeakReference;
diff --git a/src/lang/VariableTerm.java b/src/lang/VariableTerm.java
index db9f56e..ef28ad4 100644
--- a/src/lang/VariableTerm.java
+++ b/src/lang/VariableTerm.java
@@ -1,4 +1,7 @@
 package com.googlecode.prolog_cafe.lang;
+
+import com.googlecode.prolog_cafe.exceptions.InternalException;
+
 /**
  * Variable.<br>
  * The <code>VariableTerm</code> class represents a logical variable.<br>
diff --git a/src/repl/BlockingPrologControl.java b/src/repl/BlockingPrologControl.java
index c8927c8..829d91d 100644
--- a/src/repl/BlockingPrologControl.java
+++ b/src/repl/BlockingPrologControl.java
@@ -1,9 +1,9 @@
 package com.googlecode.prolog_cafe.repl;
 
+import com.googlecode.prolog_cafe.exceptions.PrologException;
 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;
 
 /**
diff --git a/src/repl/PrologMain.java b/src/repl/PrologMain.java
index c0d16f6..cb1f0f8 100644
--- a/src/repl/PrologMain.java
+++ b/src/repl/PrologMain.java
@@ -1,5 +1,5 @@
 package com.googlecode.prolog_cafe.repl;
-import com.googlecode.prolog_cafe.lang.HaltException;
+import com.googlecode.prolog_cafe.exceptions.HaltException;
 import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
 import com.googlecode.prolog_cafe.lang.ListTerm;
 import com.googlecode.prolog_cafe.lang.Prolog;