diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 306d346..693340f 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,4 +1,4 @@
-              Apache Commons JCI 1.1 RELEASE NOTES
+              Apache Commons JCI 2.0 RELEASE NOTES
 
 JCI is a java compiler interface. It can be used to either compile java
 (or any other language that can be compiled to java classes like e.g. groovy
@@ -6,7 +6,7 @@
 monitor that can be used with the JCI compiling/reloading classloader. All
 the currently supported compilers feature in-memory compilation. 
 
-Release 1.1
+Release 2.0
 
 Changes in this version include:
 
diff --git a/compilers/eclipse/pom.xml b/compilers/eclipse/pom.xml
index 78bfb90..83e8589 100644
--- a/compilers/eclipse/pom.xml
+++ b/compilers/eclipse/pom.xml
@@ -20,12 +20,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <artifactId>commons-jci-eclipse</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-eclipse</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI compiler-eclipse</name>
     <description>
         Apache Commons JCI compiler implementation for the Eclipse compiler.
@@ -33,7 +33,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -43,7 +43,7 @@
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseCompilationProblem.java b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseCompilationProblem.java
similarity index 95%
rename from compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseCompilationProblem.java
rename to compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseCompilationProblem.java
index 5a0c7e2..6650faa 100755
--- a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseCompilationProblem.java
+++ b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseCompilationProblem.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 import org.eclipse.jdt.core.compiler.IProblem;
 
 /**
diff --git a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompiler.java
similarity index 96%
rename from compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
rename to compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompiler.java
index 4b3aa79..20ae3cf 100644
--- a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
+++ b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompiler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -25,10 +25,10 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.eclipse.jdt.core.compiler.IProblem;
@@ -129,7 +129,7 @@
     }
 
 
-    public org.apache.commons.jci.compilers.CompilationResult compile(
+    public org.apache.commons.jci2.compilers.CompilationResult compile(
             final String[] pSourceFiles,
             final ResourceReader pReader,
             final ResourceStore pStore,
@@ -198,7 +198,7 @@
         if (problems.size() > 0) {
             final CompilationProblem[] result = new CompilationProblem[problems.size()];
             problems.toArray(result);
-            return new org.apache.commons.jci.compilers.CompilationResult(result);
+            return new org.apache.commons.jci2.compilers.CompilationResult(result);
         }
 
         final IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.proceedWithAllProblems();
@@ -323,7 +323,7 @@
                 /*
                  * See https://issues.apache.org/jira/browse/JCI-59
                  * At present, the code assumes that anything else is a package name
-                 * This is wrong, as for example jci.AdditionalTopLevel is not a package name.
+                 * This is wrong, as for example jci2.AdditionalTopLevel is not a package name.
                  * It's not clear how to fix this in general.
                  * It would seem to need access to the input classpath and/or the generated classes.
                  */
@@ -389,7 +389,7 @@
 
         final CompilationProblem[] result = new CompilationProblem[problems.size()];
         problems.toArray(result);
-        return new org.apache.commons.jci.compilers.CompilationResult(result);
+        return new org.apache.commons.jci2.compilers.CompilationResult(result);
     }
 
     public JavaCompilerSettings createDefaultSettings() {
diff --git a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettings.java
similarity index 98%
rename from compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
rename to compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettings.java
index 3634805..f240a58 100644
--- a/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
+++ b/compilers/eclipse/src/main/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettings.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettingsTestCase.java b/compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettingsTestCase.java
similarity index 98%
rename from compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettingsTestCase.java
rename to compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettingsTestCase.java
index 8e60a4c..a0bfdb9 100644
--- a/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettingsTestCase.java
+++ b/compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerSettingsTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.Map;
 
diff --git a/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java b/compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerTestCase.java
similarity index 97%
rename from compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
rename to compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerTestCase.java
index df50d68..444883f 100644
--- a/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
+++ b/compilers/eclipse/src/test/java/org/apache/commons/jci2/compilers/EclipseJavaCompilerTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import junit.framework.AssertionFailedError;
 
diff --git a/compilers/groovy/pom.xml b/compilers/groovy/pom.xml
index 5c289b6..829e9cb 100644
--- a/compilers/groovy/pom.xml
+++ b/compilers/groovy/pom.xml
@@ -20,12 +20,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <artifactId>commons-jci-groovy</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-groovy</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI compiler-groovy</name>
     <description>
         Apache Commons JCI compiler implementation for the Groovy compiler.
@@ -33,7 +33,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -43,7 +43,7 @@
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyCompilationProblem.java b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyCompilationProblem.java
similarity index 96%
rename from compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyCompilationProblem.java
rename to compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyCompilationProblem.java
index a931046..7a6b3af 100755
--- a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyCompilationProblem.java
+++ b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyCompilationProblem.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 import org.codehaus.groovy.control.messages.ExceptionMessage;
 import org.codehaus.groovy.control.messages.Message;
 import org.codehaus.groovy.control.messages.SimpleMessage;
diff --git a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompiler.java
similarity index 95%
rename from compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
rename to compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompiler.java
index 26ab6ef..6322093 100644
--- a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
+++ b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompiler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import groovy.lang.GroovyClassLoader;
 
@@ -23,10 +23,10 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.codehaus.groovy.control.CompilationFailedException;
diff --git a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompilerSettings.java b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerSettings.java
similarity index 96%
rename from compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompilerSettings.java
rename to compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerSettings.java
index 34d9f4b..04ad9a8 100644
--- a/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompilerSettings.java
+++ b/compilers/groovy/src/main/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerSettings.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import org.codehaus.groovy.control.CompilerConfiguration;
 
diff --git a/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java b/compilers/groovy/src/test/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerTestCase.java
similarity index 96%
rename from compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
rename to compilers/groovy/src/test/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerTestCase.java
index 3d8a1f6..9d1e60a 100644
--- a/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
+++ b/compilers/groovy/src/test/java/org/apache/commons/jci2/compilers/GroovyJavaCompilerTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 /**
  * 
diff --git a/compilers/janino/pom.xml b/compilers/janino/pom.xml
index 91a1db8..016e9a0 100644
--- a/compilers/janino/pom.xml
+++ b/compilers/janino/pom.xml
@@ -20,12 +20,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <artifactId>commons-jci-janino</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-janino</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI compiler-janino</name>
     <description>
         Apache Commons JCI compiler implementation for the Janino compiler.
@@ -33,7 +33,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -43,7 +43,7 @@
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoCompilationProblem.java b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoCompilationProblem.java
similarity index 96%
rename from compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoCompilationProblem.java
rename to compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoCompilationProblem.java
index c318553..5756036 100755
--- a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoCompilationProblem.java
+++ b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoCompilationProblem.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 import org.codehaus.commons.compiler.LocatedException;
 import org.codehaus.commons.compiler.Location;
 
diff --git a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompiler.java
similarity index 96%
rename from compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
rename to compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompiler.java
index 8101cd4..8d38a05 100644
--- a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
+++ b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompiler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -25,9 +25,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.codehaus.commons.compiler.CompileException;
diff --git a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompilerSettings.java b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerSettings.java
similarity index 96%
rename from compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompilerSettings.java
rename to compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerSettings.java
index f074675..e11dcd2 100644
--- a/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompilerSettings.java
+++ b/compilers/janino/src/main/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerSettings.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 public final class JaninoJavaCompilerSettings extends JavaCompilerSettings {
     // TODO: implement the native janino compiler settings
diff --git a/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java b/compilers/janino/src/test/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerTestCase.java
similarity index 96%
rename from compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
rename to compilers/janino/src/test/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerTestCase.java
index 0fbba7c..3b0e4b8 100644
--- a/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
+++ b/compilers/janino/src/test/java/org/apache/commons/jci2/compilers/JaninoJavaCompilerTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 /**
  * 
diff --git a/compilers/jsr199/pom.xml b/compilers/jsr199/pom.xml
index f5331ef..425ca49 100644
--- a/compilers/jsr199/pom.xml
+++ b/compilers/jsr199/pom.xml
@@ -20,12 +20,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <artifactId>commons-jci-jsr199</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-jsr199</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI compiler-jsr199</name>
     <description>
         Apache Commons JCI compiler implementation for JDK 1.6 and up.
@@ -33,13 +33,13 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199CompilationProblem.java b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199CompilationProblem.java
similarity index 94%
rename from compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199CompilationProblem.java
rename to compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199CompilationProblem.java
index 881dc94..c50a64b 100755
--- a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199CompilationProblem.java
+++ b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199CompilationProblem.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import javax.tools.Diagnostic;
 import javax.tools.JavaFileObject;
 
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 
 public class Jsr199CompilationProblem implements CompilationProblem {
 
diff --git a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompiler.java
similarity index 97%
rename from compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java
rename to compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompiler.java
index bfef4c7..b71e8c6 100644
--- a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java
+++ b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompiler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -39,9 +39,9 @@
 import javax.tools.ToolProvider;
 import javax.tools.JavaCompiler.CompilationTask;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerSettings.java b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerSettings.java
similarity index 95%
rename from compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerSettings.java
rename to compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerSettings.java
index 64274ca..80fcec9 100644
--- a/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerSettings.java
+++ b/compilers/jsr199/src/main/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerSettings.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 public class Jsr199JavaCompilerSettings extends JavaCompilerSettings {
 
diff --git a/compilers/jsr199/src/test/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerTestCase.java b/compilers/jsr199/src/test/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerTestCase.java
similarity index 95%
rename from compilers/jsr199/src/test/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerTestCase.java
rename to compilers/jsr199/src/test/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerTestCase.java
index 1158452..b5c2916 100644
--- a/compilers/jsr199/src/test/java/org/apache/commons/jci/compilers/Jsr199JavaCompilerTestCase.java
+++ b/compilers/jsr199/src/test/java/org/apache/commons/jci2/compilers/Jsr199JavaCompilerTestCase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
- package org.apache.commons.jci.compilers;
+ package org.apache.commons.jci2.compilers;
 
 public final class Jsr199JavaCompilerTestCase extends AbstractCompilerTestCase {
 
diff --git a/compilers/rhino/pom.xml b/compilers/rhino/pom.xml
index aed3541..2e0d35a 100644
--- a/compilers/rhino/pom.xml
+++ b/compilers/rhino/pom.xml
@@ -20,12 +20,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <artifactId>commons-jci-rhino</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-rhino</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI compiler-rhino</name>
     <description>
         Apache Commons JCI compiler implementation for Rhino javascript.
@@ -33,7 +33,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -43,7 +43,7 @@
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoCompilationProblem.java b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoCompilationProblem.java
similarity index 94%
rename from compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoCompilationProblem.java
rename to compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoCompilationProblem.java
index bdee2c5..2fa79bf 100755
--- a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoCompilationProblem.java
+++ b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoCompilationProblem.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 
 /**
  * 
diff --git a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompiler.java b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompiler.java
similarity index 97%
rename from compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompiler.java
rename to compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompiler.java
index fc9d701..f4f093e 100644
--- a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompiler.java
+++ b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompiler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.io.ByteArrayInputStream;
 import java.io.FileNotFoundException;
@@ -26,10 +26,10 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.mozilla.javascript.CompilerEnvirons;
diff --git a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompilerSettings.java b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerSettings.java
similarity index 95%
rename from compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompilerSettings.java
rename to compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerSettings.java
index 4f53477..cc09382 100644
--- a/compilers/rhino/src/main/java/org/apache/commons/jci/compilers/RhinoJavaCompilerSettings.java
+++ b/compilers/rhino/src/main/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerSettings.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 /**
  * @author tcurdt
diff --git a/compilers/rhino/src/test/java/org/apache/commons/jci/compilers/RhinoJavaCompilerTestCase.java b/compilers/rhino/src/test/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerTestCase.java
similarity index 92%
rename from compilers/rhino/src/test/java/org/apache/commons/jci/compilers/RhinoJavaCompilerTestCase.java
rename to compilers/rhino/src/test/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerTestCase.java
index b87f85d..2ade7a3 100644
--- a/compilers/rhino/src/test/java/org/apache/commons/jci/compilers/RhinoJavaCompilerTestCase.java
+++ b/compilers/rhino/src/test/java/org/apache/commons/jci2/compilers/RhinoJavaCompilerTestCase.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.MemoryResourceStore;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
 
 /**
  * 
@@ -47,7 +47,7 @@
             final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                 private static final long serialVersionUID = 1L;
                 {
-                    put("jci/Simple.js", (
+                    put("jci2/Simple.js", (
                             " var i = 0;\n" +
                             "\n"
                     ).getBytes());
@@ -66,13 +66,13 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                 new String[] {
-                        "jci/Simple.js"
+                        "jci2/Simple.js"
                 }, reader, store);
 
         assertEquals(toString(result.getErrors()), 0, result.getErrors().length);
         assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 
-        final byte[] clazzBytes = store.read("jci/Simple.class");
+        final byte[] clazzBytes = store.read("jci2/Simple.class");
         assertNotNull(clazzBytes);
         assertTrue(clazzBytes.length > 0);
     }
diff --git a/core/pom.xml b/core/pom.xml
index f0bc810..155bb35 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -20,11 +20,11 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
     </parent>
-    <artifactId>commons-jci-core</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-core</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI core</name>
     <description>
         Apache Commons JCI core interfaces and implementations.
@@ -32,7 +32,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-fam</artifactId>
+            <artifactId>commons-jci2-fam</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
diff --git a/core/src/main/java/org/apache/commons/jci/ReloadingClassLoader.java b/core/src/main/java/org/apache/commons/jci2/ReloadingClassLoader.java
similarity index 94%
rename from core/src/main/java/org/apache/commons/jci/ReloadingClassLoader.java
rename to core/src/main/java/org/apache/commons/jci2/ReloadingClassLoader.java
index 2fb03b8..e664556 100644
--- a/core/src/main/java/org/apache/commons/jci/ReloadingClassLoader.java
+++ b/core/src/main/java/org/apache/commons/jci2/ReloadingClassLoader.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci;
+package org.apache.commons.jci2;
 
 import java.io.InputStream;
 import java.net.URL;
 
-import org.apache.commons.jci.listeners.ReloadNotificationListener;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.stores.ResourceStoreClassLoader;
+import org.apache.commons.jci2.listeners.ReloadNotificationListener;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.stores.ResourceStoreClassLoader;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/AbstractJavaCompiler.java b/core/src/main/java/org/apache/commons/jci2/compilers/AbstractJavaCompiler.java
similarity index 89%
rename from core/src/main/java/org/apache/commons/jci/compilers/AbstractJavaCompiler.java
rename to core/src/main/java/org/apache/commons/jci2/compilers/AbstractJavaCompiler.java
index 916219a..b26c90d 100644
--- a/core/src/main/java/org/apache/commons/jci/compilers/AbstractJavaCompiler.java
+++ b/core/src/main/java/org/apache/commons/jci2/compilers/AbstractJavaCompiler.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblemHandler;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
+import org.apache.commons.jci2.problems.CompilationProblemHandler;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
 
 
 /**
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/CompilationResult.java b/core/src/main/java/org/apache/commons/jci2/compilers/CompilationResult.java
similarity index 95%
rename from core/src/main/java/org/apache/commons/jci/compilers/CompilationResult.java
rename to core/src/main/java/org/apache/commons/jci2/compilers/CompilationResult.java
index 21a1480..ca22097 100644
--- a/core/src/main/java/org/apache/commons/jci/compilers/CompilationResult.java
+++ b/core/src/main/java/org/apache/commons/jci2/compilers/CompilationResult.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblem;
 
 /**
  * A CompilationResult represents the result of a compilation.
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompiler.java b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompiler.java
similarity index 93%
rename from core/src/main/java/org/apache/commons/jci/compilers/JavaCompiler.java
rename to core/src/main/java/org/apache/commons/jci2/compilers/JavaCompiler.java
index 3babdbc..ca9391d 100644
--- a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompiler.java
+++ b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompiler.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
-import org.apache.commons.jci.problems.CompilationProblemHandler;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
+import org.apache.commons.jci2.problems.CompilationProblemHandler;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
 
 
 /**
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerFactory.java b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerFactory.java
similarity index 90%
rename from core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerFactory.java
rename to core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerFactory.java
index 860dc85..198eb74 100644
--- a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerFactory.java
+++ b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerFactory.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.utils.ConversionUtils;
 
 
 /**
@@ -52,7 +52,7 @@
      * Tries to guess the class name by convention. So for compilers
      * following the naming convention
      * 
-     *   org.apache.commons.jci.compilers.SomeJavaCompiler
+     *   org.apache.commons.jci2.compilers.SomeJavaCompiler
      *   
      * you can use the short-hands "some"/"Some"/"SOME". Otherwise
      * you have to provide the full class name. The compiler is
@@ -65,7 +65,7 @@
         
         final String className;
         if (pHint.indexOf('.') < 0) {
-            className = "org.apache.commons.jci.compilers." + ConversionUtils.toJavaCasing(pHint) + "JavaCompiler";
+            className = "org.apache.commons.jci2.compilers." + ConversionUtils.toJavaCasing(pHint) + "JavaCompiler";
         } else {
             className = pHint;
         }
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerSettings.java b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerSettings.java
similarity index 98%
rename from core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerSettings.java
rename to core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerSettings.java
index 39b48cd..2223368 100644
--- a/core/src/main/java/org/apache/commons/jci/compilers/JavaCompilerSettings.java
+++ b/core/src/main/java/org/apache/commons/jci2/compilers/JavaCompilerSettings.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 
 
diff --git a/core/src/main/java/org/apache/commons/jci/compilers/package.html b/core/src/main/java/org/apache/commons/jci2/compilers/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/compilers/package.html
rename to core/src/main/java/org/apache/commons/jci2/compilers/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java b/core/src/main/java/org/apache/commons/jci2/listeners/CompilingListener.java
similarity index 89%
rename from core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
rename to core/src/main/java/org/apache/commons/jci2/listeners/CompilingListener.java
index 14c7ccb..ea62ae8 100644
--- a/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
+++ b/core/src/main/java/org/apache/commons/jci2/listeners/CompilingListener.java
@@ -15,23 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.listeners;
+package org.apache.commons.jci2.listeners;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.commons.jci.compilers.CompilationResult;
-import org.apache.commons.jci.compilers.JavaCompiler;
-import org.apache.commons.jci.compilers.JavaCompilerFactory;
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.FileResourceReader;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.MemoryResourceStore;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.stores.TransactionalResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.compilers.CompilationResult;
+import org.apache.commons.jci2.compilers.JavaCompiler;
+import org.apache.commons.jci2.compilers.JavaCompilerFactory;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.FileResourceReader;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.stores.TransactionalResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/core/src/main/java/org/apache/commons/jci/listeners/FileChangeListener.java b/core/src/main/java/org/apache/commons/jci2/listeners/FileChangeListener.java
similarity index 94%
rename from core/src/main/java/org/apache/commons/jci/listeners/FileChangeListener.java
rename to core/src/main/java/org/apache/commons/jci2/listeners/FileChangeListener.java
index 27ee106..37a8188 100644
--- a/core/src/main/java/org/apache/commons/jci/listeners/FileChangeListener.java
+++ b/core/src/main/java/org/apache/commons/jci2/listeners/FileChangeListener.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.listeners;
+package org.apache.commons.jci2.listeners;
 
 import java.io.File;
 
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
 
 /**
  * The most simple implemenation of an FilesystemAlterationListener.
diff --git a/core/src/main/java/org/apache/commons/jci/listeners/ReloadNotificationListener.java b/core/src/main/java/org/apache/commons/jci2/listeners/ReloadNotificationListener.java
similarity index 95%
rename from core/src/main/java/org/apache/commons/jci/listeners/ReloadNotificationListener.java
rename to core/src/main/java/org/apache/commons/jci2/listeners/ReloadNotificationListener.java
index c3bc48e..4cc9d6e 100644
--- a/core/src/main/java/org/apache/commons/jci/listeners/ReloadNotificationListener.java
+++ b/core/src/main/java/org/apache/commons/jci2/listeners/ReloadNotificationListener.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.listeners;
+package org.apache.commons.jci2.listeners;
 
 /**
  * Classes implementing this interface can get notified by ReloadingListeners
diff --git a/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java b/core/src/main/java/org/apache/commons/jci2/listeners/ReloadingListener.java
similarity index 93%
rename from core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
rename to core/src/main/java/org/apache/commons/jci2/listeners/ReloadingListener.java
index f8e3378..0675667 100644
--- a/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
+++ b/core/src/main/java/org/apache/commons/jci2/listeners/ReloadingListener.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.listeners;
+package org.apache.commons.jci2.listeners;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -24,12 +24,12 @@
 import java.util.Set;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.jci.ReloadingClassLoader;
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
-import org.apache.commons.jci.stores.MemoryResourceStore;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.stores.Transactional;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.ReloadingClassLoader;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.stores.Transactional;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/core/src/main/java/org/apache/commons/jci/listeners/package.html b/core/src/main/java/org/apache/commons/jci2/listeners/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/listeners/package.html
rename to core/src/main/java/org/apache/commons/jci2/listeners/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/package.html b/core/src/main/java/org/apache/commons/jci2/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/package.html
rename to core/src/main/java/org/apache/commons/jci2/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/problems/CompilationProblem.java b/core/src/main/java/org/apache/commons/jci2/problems/CompilationProblem.java
similarity index 97%
rename from core/src/main/java/org/apache/commons/jci/problems/CompilationProblem.java
rename to core/src/main/java/org/apache/commons/jci2/problems/CompilationProblem.java
index 210088f..a3b807e 100644
--- a/core/src/main/java/org/apache/commons/jci/problems/CompilationProblem.java
+++ b/core/src/main/java/org/apache/commons/jci2/problems/CompilationProblem.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.problems;
+package org.apache.commons.jci2.problems;
 
 /**
  * An abstract definition of a compilation problem
diff --git a/core/src/main/java/org/apache/commons/jci/problems/CompilationProblemHandler.java b/core/src/main/java/org/apache/commons/jci2/problems/CompilationProblemHandler.java
similarity index 96%
rename from core/src/main/java/org/apache/commons/jci/problems/CompilationProblemHandler.java
rename to core/src/main/java/org/apache/commons/jci2/problems/CompilationProblemHandler.java
index bf22904..3e6612c 100644
--- a/core/src/main/java/org/apache/commons/jci/problems/CompilationProblemHandler.java
+++ b/core/src/main/java/org/apache/commons/jci2/problems/CompilationProblemHandler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.problems;
+package org.apache.commons.jci2.problems;
 
 
 /**
diff --git a/core/src/main/java/org/apache/commons/jci/problems/package.html b/core/src/main/java/org/apache/commons/jci2/problems/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/problems/package.html
rename to core/src/main/java/org/apache/commons/jci2/problems/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/readers/FileResourceReader.java b/core/src/main/java/org/apache/commons/jci2/readers/FileResourceReader.java
similarity index 97%
rename from core/src/main/java/org/apache/commons/jci/readers/FileResourceReader.java
rename to core/src/main/java/org/apache/commons/jci2/readers/FileResourceReader.java
index 2eb4983..b285db7 100644
--- a/core/src/main/java/org/apache/commons/jci/readers/FileResourceReader.java
+++ b/core/src/main/java/org/apache/commons/jci2/readers/FileResourceReader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.readers;
+package org.apache.commons.jci2.readers;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/apache/commons/jci/readers/MemoryResourceReader.java b/core/src/main/java/org/apache/commons/jci2/readers/MemoryResourceReader.java
similarity index 97%
rename from core/src/main/java/org/apache/commons/jci/readers/MemoryResourceReader.java
rename to core/src/main/java/org/apache/commons/jci2/readers/MemoryResourceReader.java
index 4f9d08a..57e487a 100644
--- a/core/src/main/java/org/apache/commons/jci/readers/MemoryResourceReader.java
+++ b/core/src/main/java/org/apache/commons/jci2/readers/MemoryResourceReader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.readers;
+package org.apache.commons.jci2.readers;
 
 import java.util.Map;
 import java.util.HashMap;
diff --git a/core/src/main/java/org/apache/commons/jci/readers/ResourceReader.java b/core/src/main/java/org/apache/commons/jci2/readers/ResourceReader.java
similarity index 96%
rename from core/src/main/java/org/apache/commons/jci/readers/ResourceReader.java
rename to core/src/main/java/org/apache/commons/jci2/readers/ResourceReader.java
index 638cf2e..3465e99 100644
--- a/core/src/main/java/org/apache/commons/jci/readers/ResourceReader.java
+++ b/core/src/main/java/org/apache/commons/jci2/readers/ResourceReader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.readers;
+package org.apache.commons.jci2.readers;
 
 /**
  * A ResourceReader provide acces to resource like e.g. source code
diff --git a/core/src/main/java/org/apache/commons/jci/readers/package.html b/core/src/main/java/org/apache/commons/jci2/readers/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/readers/package.html
rename to core/src/main/java/org/apache/commons/jci2/readers/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/stores/FileResourceStore.java b/core/src/main/java/org/apache/commons/jci2/stores/FileResourceStore.java
similarity index 98%
rename from core/src/main/java/org/apache/commons/jci/stores/FileResourceStore.java
rename to core/src/main/java/org/apache/commons/jci2/stores/FileResourceStore.java
index fc65129..00b92b1 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/FileResourceStore.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/FileResourceStore.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
 import java.io.File;
 import java.io.FileInputStream;
diff --git a/core/src/main/java/org/apache/commons/jci/stores/MemoryResourceStore.java b/core/src/main/java/org/apache/commons/jci2/stores/MemoryResourceStore.java
similarity index 98%
rename from core/src/main/java/org/apache/commons/jci/stores/MemoryResourceStore.java
rename to core/src/main/java/org/apache/commons/jci2/stores/MemoryResourceStore.java
index dfbe525..eb50166 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/MemoryResourceStore.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/MemoryResourceStore.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/core/src/main/java/org/apache/commons/jci/stores/ResourceStore.java b/core/src/main/java/org/apache/commons/jci2/stores/ResourceStore.java
similarity index 96%
rename from core/src/main/java/org/apache/commons/jci/stores/ResourceStore.java
rename to core/src/main/java/org/apache/commons/jci2/stores/ResourceStore.java
index 196f146..ce94d84 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/ResourceStore.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/ResourceStore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
 /**
  * A Store is where the compilers are storing the results
diff --git a/core/src/main/java/org/apache/commons/jci/stores/ResourceStoreClassLoader.java b/core/src/main/java/org/apache/commons/jci2/stores/ResourceStoreClassLoader.java
similarity index 96%
rename from core/src/main/java/org/apache/commons/jci/stores/ResourceStoreClassLoader.java
rename to core/src/main/java/org/apache/commons/jci2/stores/ResourceStoreClassLoader.java
index bde6793..175376f 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/ResourceStoreClassLoader.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/ResourceStoreClassLoader.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/core/src/main/java/org/apache/commons/jci/stores/Transactional.java b/core/src/main/java/org/apache/commons/jci2/stores/Transactional.java
similarity index 95%
rename from core/src/main/java/org/apache/commons/jci/stores/Transactional.java
rename to core/src/main/java/org/apache/commons/jci2/stores/Transactional.java
index b24afe5..0d80c8b 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/Transactional.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/Transactional.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
 /**
  * Receive start/stop events
diff --git a/core/src/main/java/org/apache/commons/jci/stores/TransactionalResourceStore.java b/core/src/main/java/org/apache/commons/jci2/stores/TransactionalResourceStore.java
similarity index 97%
rename from core/src/main/java/org/apache/commons/jci/stores/TransactionalResourceStore.java
rename to core/src/main/java/org/apache/commons/jci2/stores/TransactionalResourceStore.java
index d92ac0f..cea0c3e 100644
--- a/core/src/main/java/org/apache/commons/jci/stores/TransactionalResourceStore.java
+++ b/core/src/main/java/org/apache/commons/jci2/stores/TransactionalResourceStore.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
 
 /**
diff --git a/core/src/main/java/org/apache/commons/jci/stores/package.html b/core/src/main/java/org/apache/commons/jci2/stores/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/stores/package.html
rename to core/src/main/java/org/apache/commons/jci2/stores/package.html
diff --git a/core/src/main/java/org/apache/commons/jci/utils/ConversionUtils.java b/core/src/main/java/org/apache/commons/jci2/utils/ConversionUtils.java
similarity index 98%
rename from core/src/main/java/org/apache/commons/jci/utils/ConversionUtils.java
rename to core/src/main/java/org/apache/commons/jci2/utils/ConversionUtils.java
index 5622b39..ff9016a 100644
--- a/core/src/main/java/org/apache/commons/jci/utils/ConversionUtils.java
+++ b/core/src/main/java/org/apache/commons/jci2/utils/ConversionUtils.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.utils;
+package org.apache.commons.jci2.utils;
 
 import java.io.File;
 import java.util.Locale;
diff --git a/core/src/main/java/org/apache/commons/jci/utils/package.html b/core/src/main/java/org/apache/commons/jci2/utils/package.html
similarity index 100%
rename from core/src/main/java/org/apache/commons/jci/utils/package.html
rename to core/src/main/java/org/apache/commons/jci2/utils/package.html
diff --git a/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java b/core/src/test/java/org/apache/commons/jci2/AbstractTestCase.java
similarity index 97%
rename from core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/AbstractTestCase.java
index ee4b01c..6438d3a 100644
--- a/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/AbstractTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci;
+package org.apache.commons.jci2;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -99,7 +99,7 @@
     }
     
     protected File createTempDirectory() throws IOException {
-        final File tempFile = File.createTempFile("jci", null);
+        final File tempFile = File.createTempFile("jci2", null);
         
         if (!tempFile.delete()) {
             throw new IOException();
diff --git a/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java b/core/src/test/java/org/apache/commons/jci2/CompilingClassLoaderTestCase.java
similarity index 71%
rename from core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/CompilingClassLoaderTestCase.java
index f07dafc..7d4bac2 100644
--- a/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/CompilingClassLoaderTestCase.java
@@ -15,23 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci;
+package org.apache.commons.jci2;
 
 import java.io.File;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.jci.classes.ExtendedDump;
-import org.apache.commons.jci.classes.SimpleDump;
-import org.apache.commons.jci.compilers.CompilationResult;
-import org.apache.commons.jci.compilers.JavaCompiler;
-import org.apache.commons.jci.compilers.JavaCompilerSettings;
-import org.apache.commons.jci.listeners.CompilingListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.problems.CompilationProblemHandler;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.classes.ExtendedDump;
+import org.apache.commons.jci2.classes.SimpleDump;
+import org.apache.commons.jci2.compilers.CompilationResult;
+import org.apache.commons.jci2.compilers.JavaCompiler;
+import org.apache.commons.jci2.compilers.JavaCompilerSettings;
+import org.apache.commons.jci2.listeners.CompilingListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationMonitor;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblemHandler;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -61,7 +61,7 @@
 
                 final byte[] data;
 
-                if ("jci/Simple.java".equals(resourcePath)) {
+                if ("jci2/Simple.java".equals(resourcePath)) {
 
                     try {
                         data = SimpleDump.dump(new String(resourceContent));
@@ -69,7 +69,7 @@
                         throw new RuntimeException("cannot handle resource " + resourcePath, e);
                     }
 
-                } else if ("jci/Extended.java".equals(resourcePath)) {
+                } else if ("jci2/Extended.java".equals(resourcePath)) {
 
                     try {
                         data = ExtendedDump.dump();
@@ -126,8 +126,8 @@
 
         listener.waitForFirstCheck();
                 
-        writeFile("jci/Simple.java", "Simple1");        
-        writeFile("jci/Extended.java", "Extended");        
+        writeFile("jci2/Simple.java", "Simple1");
+        writeFile("jci2/Extended.java", "Extended");
         
         log.debug("waiting for compile changes to get applied");        
         listener.waitForCheck();
@@ -139,73 +139,73 @@
         initialCompile();
         
         log.debug("loading Simple");        
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
         
         log.debug("loading Extended");        
-        final Object extended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object extended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple1", extended.toString());
     }
 
     public void testChange() throws Exception {        
         initialCompile();
 
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
         
-        final Object extended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object extended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple1", extended.toString());
 
         delay();
-        writeFile("jci/Simple.java", "Simple2");
+        writeFile("jci2/Simple.java", "Simple2");
         listener.waitForCheck();
     
-        final Object simple2 = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple2 = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple2", simple2.toString());
         
-        final Object newExtended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object newExtended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple2", newExtended.toString());
     }
 
     public void testDelete() throws Exception {
         initialCompile();
 
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
         
-        final Object extended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object extended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple1", extended.toString());
                 
         listener.waitForCheck();
         
         log.debug("deleting source file");
-        assertTrue(new File(directory, "jci/Extended.java").delete());
+        assertTrue(new File(directory, "jci2/Extended.java").delete());
         
         listener.waitForCheck();
        
         log.debug("loading Simple");
-        final Object oldSimple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object oldSimple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", oldSimple.toString());
 
         log.debug("trying to loading Extended");
         try {
-            classloader.loadClass("jci.Extended").newInstance();
+            classloader.loadClass("jci2.Extended").newInstance();
             fail();
         } catch(final ClassNotFoundException e) {
-            assertEquals("jci.Extended", e.getMessage());
+            assertEquals("jci2.Extended", e.getMessage());
         }        
         
         log.debug("deleting whole directory");
-        FileUtils.deleteDirectory(new File(directory, "jci"));
+        FileUtils.deleteDirectory(new File(directory, "jci2"));
 
         listener.waitForCheck();
 
         log.debug("trying to loading Simple");
         try {
-            classloader.loadClass("jci.Simple").newInstance();
+            classloader.loadClass("jci2.Simple").newInstance();
             fail();
         } catch(final ClassNotFoundException e) {
-            assertEquals("jci.Simple", e.getMessage());
+            assertEquals("jci2.Simple", e.getMessage());
         }
 
     }
@@ -213,22 +213,22 @@
     public void testDeleteDependency() throws Exception {        
         initialCompile();
 
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
         
-        final Object extended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object extended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple1", extended.toString());
         
         log.debug("deleting source file");
-        assertTrue(new File(directory, "jci/Simple.java").delete());
+        assertTrue(new File(directory, "jci2/Simple.java").delete());
         listener.waitForCheck();
 
         log.debug("trying to load dependend class");
         try {
-            classloader.loadClass("jci.Extended").newInstance();
+            classloader.loadClass("jci2.Extended").newInstance();
             fail();
         } catch(final NoClassDefFoundError e) {
-            assertEquals("jci/Simple", e.getMessage());
+            assertEquals("jci2/Simple", e.getMessage());
         }
         
     }
diff --git a/core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderRemoveTestCase.java b/core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderRemoveTestCase.java
similarity index 93%
rename from core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderRemoveTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderRemoveTestCase.java
index fae3466..b79fe69 100644
--- a/core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderRemoveTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderRemoveTestCase.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci;
+package org.apache.commons.jci2;
 
 import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.commons.jci.classes.SimpleDump;
-import org.apache.commons.jci.stores.ResourceStore;
-import org.apache.commons.jci.stores.MemoryResourceStore;
+import org.apache.commons.jci2.classes.SimpleDump;
+import org.apache.commons.jci2.stores.ResourceStore;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
 
 /**
  * Test ReloadingClassLoader's <code>removeResourceStore({@link ResourceStore})</code>
@@ -203,9 +203,9 @@
         MemoryResourceStore store = new MemoryResourceStore();
         loader.addResourceStore(store);
 
-        // Check "jci.Simple" class can't be loaded
+        // Check "jci2.Simple" class can't be loaded
         try {
-            loader.loadClass("jci.Simple").newInstance();        
+            loader.loadClass("jci2.Simple").newInstance();
             fail("Success loadClass[1]");
         } catch(ClassNotFoundException e) {
             // expected not found
@@ -214,19 +214,19 @@
             fail("Error loadClass[1]: " + e);
         }
 
-        // Add "jci.Simple" class to the resource store
+        // Add "jci2.Simple" class to the resource store
         String toStringValue = "FooBar";
         try {
             byte[] classBytes = SimpleDump.dump(toStringValue);
-            store.write("jci/Simple.class", classBytes);
+            store.write("jci2/Simple.class", classBytes);
         } catch(Exception e) {
             log.error(e);
             fail("Error adding class to store: " + e);
         }
 
-        // Check "jci.Simple" class can now be loaded
+        // Check "jci2.Simple" class can now be loaded
         try {
-            Object simple2 = loader.loadClass("jci.Simple").newInstance();        
+            Object simple2 = loader.loadClass("jci2.Simple").newInstance();
             assertNotNull("Found loadClass[2]",  simple2);        
             assertEquals("toString loadClass[2]",  toStringValue, simple2.toString());        
         } catch(Exception e) {
@@ -237,9 +237,9 @@
         // Remove the resource store from the class loader
         checkRemoveResourceStore("Remove Resource Store", loader, store, true);
 
-        // Test "jci.Simple" class can't be loaded after ResourceStore removed
+        // Test "jci2.Simple" class can't be loaded after ResourceStore removed
         try {
-            loader.loadClass("jci.Simple").newInstance();        
+            loader.loadClass("jci2.Simple").newInstance();
             fail("Success loadClass[3]");
         } catch(ClassNotFoundException e) {
             // expected not found
diff --git a/core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderTestCase.java b/core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderTestCase.java
similarity index 73%
rename from core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderTestCase.java
index 9a10a9a..16b675b 100644
--- a/core/src/test/java/org/apache/commons/jci/ReloadingClassLoaderTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/ReloadingClassLoaderTestCase.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci;
+package org.apache.commons.jci2;
 
 import java.io.File;
 
-import org.apache.commons.jci.classes.ExtendedDump;
-import org.apache.commons.jci.classes.SimpleDump;
-import org.apache.commons.jci.listeners.ReloadingListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
+import org.apache.commons.jci2.classes.ExtendedDump;
+import org.apache.commons.jci2.classes.SimpleDump;
+import org.apache.commons.jci2.listeners.ReloadingListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationMonitor;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -69,10 +69,10 @@
         listener.waitForFirstCheck();
 
         log.debug("creating class");        
-        writeFile("jci/Simple.class", clazzSimple1);
+        writeFile("jci2/Simple.class", clazzSimple1);
         listener.waitForCheck();
         
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());        
     }
 
@@ -80,17 +80,17 @@
         listener.waitForFirstCheck();
 
         log.debug("creating class");
-        writeFile("jci/Simple.class", clazzSimple1);
+        writeFile("jci2/Simple.class", clazzSimple1);
         listener.waitForCheck();
 
-        final Object simple1 = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple1 = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple1.toString());
         
         log.debug("changing class");        
-        writeFile("jci/Simple.class", clazzSimple2);
+        writeFile("jci2/Simple.class", clazzSimple2);
         listener.waitForEvent();
     
-        final Object simple2 = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple2 = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple2", simple2.toString());        
     }
 
@@ -98,21 +98,21 @@
         listener.waitForFirstCheck();
 
         log.debug("creating class");
-        writeFile("jci/Simple.class", clazzSimple1);
+        writeFile("jci2/Simple.class", clazzSimple1);
         listener.waitForCheck();
 
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
 
         log.debug("deleting class");        
-        assertTrue(new File(directory, "jci/Simple.class").delete());
+        assertTrue(new File(directory, "jci2/Simple.class").delete());
         listener.waitForEvent();
 
         try {
-            classloader.loadClass("jci.Simple").newInstance();        
+            classloader.loadClass("jci2.Simple").newInstance();
             fail();
         } catch(final ClassNotFoundException e) {
-            assertEquals("jci.Simple", e.getMessage());
+            assertEquals("jci2.Simple", e.getMessage());
         }        
     }
 
@@ -120,25 +120,25 @@
         listener.waitForFirstCheck();
 
         log.debug("creating classes");
-        writeFile("jci/Simple.class", clazzSimple1);
-        writeFile("jci/Extended.class", clazzExtended);
+        writeFile("jci2/Simple.class", clazzSimple1);
+        writeFile("jci2/Extended.class", clazzExtended);
         listener.waitForCheck();
 
-        final Object simple = classloader.loadClass("jci.Simple").newInstance();        
+        final Object simple = classloader.loadClass("jci2.Simple").newInstance();
         assertEquals("Simple1", simple.toString());
         
-        final Object extended = classloader.loadClass("jci.Extended").newInstance();        
+        final Object extended = classloader.loadClass("jci2.Extended").newInstance();
         assertEquals("Extended:Simple1", extended.toString());
 
         log.debug("deleting class dependency");        
-        assertTrue(new File(directory, "jci/Simple.class").delete());
+        assertTrue(new File(directory, "jci2/Simple.class").delete());
         listener.waitForEvent();
 
         try {
-            classloader.loadClass("jci.Extended").newInstance();
+            classloader.loadClass("jci2.Extended").newInstance();
             fail();
         } catch(final NoClassDefFoundError e) {
-            assertEquals("jci/Simple", e.getMessage());
+            assertEquals("jci2/Simple", e.getMessage());
         }
     }
 
@@ -152,9 +152,9 @@
     
     public void testDelegation() {
         classloader.clearAssertionStatus();
-        classloader.setClassAssertionStatus("org.apache.commons.jci.ReloadingClassLoader", true);
+        classloader.setClassAssertionStatus("org.apache.commons.jci2.ReloadingClassLoader", true);
         classloader.setDefaultAssertionStatus(false);
-        classloader.setPackageAssertionStatus("org.apache.commons.jci", true);
+        classloader.setPackageAssertionStatus("org.apache.commons.jci2", true);
         // FIXME: compare with delegation
     }
     
diff --git a/core/src/test/java/org/apache/commons/jci/classes/ExtendedDump.java b/core/src/test/java/org/apache/commons/jci2/classes/ExtendedDump.java
similarity index 89%
rename from core/src/test/java/org/apache/commons/jci/classes/ExtendedDump.java
rename to core/src/test/java/org/apache/commons/jci2/classes/ExtendedDump.java
index 1f6a555..81f28bb 100644
--- a/core/src/test/java/org/apache/commons/jci/classes/ExtendedDump.java
+++ b/core/src/test/java/org/apache/commons/jci2/classes/ExtendedDump.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.classes;
+package org.apache.commons.jci2.classes;
 
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
@@ -30,7 +30,7 @@
         ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
         MethodVisitor mv;
 
-        cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER, "jci/Extended", null, "jci/Simple", null);
+        cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER, "jci2/Extended", null, "jci2/Simple", null);
 
         cw.visitSource("Extended.java", null);
 
@@ -41,7 +41,7 @@
             mv.visitLabel(l0);
             mv.visitLineNumber(3, l0);
             mv.visitVarInsn(ALOAD, 0);
-            mv.visitMethodInsn(INVOKESPECIAL, "jci/Simple", "<init>", "()V");
+            mv.visitMethodInsn(INVOKESPECIAL, "jci2/Simple", "<init>", "()V");
             mv.visitInsn(RETURN);
             Label l1 = new Label();
             mv.visitLabel(l1);
@@ -60,7 +60,7 @@
             mv.visitLdcInsn("Extended:");
             mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuffer", "<init>", "(Ljava/lang/String;)V");
             mv.visitVarInsn(ALOAD, 0);
-            mv.visitMethodInsn(INVOKESPECIAL, "jci/Simple", "toString", "()Ljava/lang/String;");
+            mv.visitMethodInsn(INVOKESPECIAL, "jci2/Simple", "toString", "()Ljava/lang/String;");
             mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuffer", "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
             mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuffer", "toString", "()Ljava/lang/String;");
             mv.visitInsn(ARETURN);
diff --git a/core/src/test/java/org/apache/commons/jci/classes/SimpleDump.java b/core/src/test/java/org/apache/commons/jci2/classes/SimpleDump.java
similarity index 94%
rename from core/src/test/java/org/apache/commons/jci/classes/SimpleDump.java
rename to core/src/test/java/org/apache/commons/jci2/classes/SimpleDump.java
index 687c143..42d623d 100644
--- a/core/src/test/java/org/apache/commons/jci/classes/SimpleDump.java
+++ b/core/src/test/java/org/apache/commons/jci2/classes/SimpleDump.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.classes;
+package org.apache.commons.jci2.classes;
 
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
@@ -29,7 +29,7 @@
         ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
         MethodVisitor mv;
 
-        cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER, "jci/Simple", null, "java/lang/Object", null);
+        cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER, "jci2/Simple", null, "java/lang/Object", null);
 
         cw.visitSource("Simple.java", null);
 
diff --git a/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java b/core/src/test/java/org/apache/commons/jci2/compilers/AbstractCompilerTestCase.java
similarity index 78%
rename from core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/compilers/AbstractCompilerTestCase.java
index 6a2a465..6b1d7e1 100644
--- a/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/compilers/AbstractCompilerTestCase.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.compilers;
+package org.apache.commons.jci2.compilers;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import junit.framework.TestCase;
 
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.MemoryResourceStore;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
 
 /**
  * Providing convenience methods for JavaCompiler TestCases
@@ -52,8 +52,8 @@
             final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                 private static final long serialVersionUID = 1L;
                 {
-                    put("jci/Simple.java", (
-                        "package jci;\n" +
+                    put("jci2/Simple.java", (
+                        "package jci2;\n" +
                         "public class Simple {\n" +
                         "  public String toString() {\n" +
                         "    return \"Simple\";\n" +
@@ -74,15 +74,15 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                 new String[] {
-                        "jci/Simple.java"
+                        "jci2/Simple.java"
                 }, reader, store);
 
         assertEquals(toString(result.getErrors()), 0, result.getErrors().length);
         assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 
-        final byte[] clazzBytes = store.read("jci/Simple.class");
-        assertNotNull("jci/Simple.class is not null",clazzBytes);
-        assertTrue("jci/Simple.class is not empty", clazzBytes.length > 0);
+        final byte[] clazzBytes = store.read("jci2/Simple.class");
+        assertNotNull("jci2/Simple.class is not null",clazzBytes);
+        assertTrue("jci2/Simple.class is not empty", clazzBytes.length > 0);
     }
 
     public void testExtendedCompile() throws Exception {
@@ -92,15 +92,15 @@
             final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                 private static final long serialVersionUID = 1L;
                 {
-                    put("jci/Simple.java", (
-                            "package jci;\n" +
+                    put("jci2/Simple.java", (
+                            "package jci2;\n" +
                             "public class Simple {\n" +
                             "  public String toString() {\n" +
                             "    return \"Simple\";\n" +
                             "  }\n" +
                     "}").getBytes());
-                    put("jci/Extended.java", (
-                            "package jci;\n" +
+                    put("jci2/Extended.java", (
+                            "package jci2;\n" +
                             "public class Extended extends Simple {\n" +
                             "  public String toString() {\n" +
                             "    return \"Extended\" + super.toString();\n" +
@@ -121,20 +121,20 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                 new String[] {
-                        "jci/Extended.java",
-                        "jci/Simple.java"
+                        "jci2/Extended.java",
+                        "jci2/Simple.java"
                 }, reader, store);
 
         assertEquals(toString(result.getErrors()), 0, result.getErrors().length);
         assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 
-        final byte[] clazzBytesSimple = store.read("jci/Simple.class");
-        assertNotNull("jci/Simple.class is not null", clazzBytesSimple);
-        assertTrue("jci/Simple.class is not empty", clazzBytesSimple.length > 0);
+        final byte[] clazzBytesSimple = store.read("jci2/Simple.class");
+        assertNotNull("jci2/Simple.class is not null", clazzBytesSimple);
+        assertTrue("jci2/Simple.class is not empty", clazzBytesSimple.length > 0);
 
-        final byte[] clazzBytesExtended = store.read("jci/Extended.class");
-        assertNotNull("jci/Extended.class is not null", clazzBytesExtended);
-        assertTrue("jci/Extended.class is not empty",clazzBytesExtended.length > 0);
+        final byte[] clazzBytesExtended = store.read("jci2/Extended.class");
+        assertNotNull("jci2/Extended.class is not null", clazzBytesExtended);
+        assertTrue("jci2/Extended.class is not empty",clazzBytesExtended.length > 0);
     }
 
     public void testInternalClassCompile() throws Exception {
@@ -144,8 +144,8 @@
             final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                 private static final long serialVersionUID = 1L;
                 {
-                    put("jci/Simple.java", (
-                            "package jci;\n" +
+                    put("jci2/Simple.java", (
+                            "package jci2;\n" +
                             "public class Simple {\n" +
                             "  private class Sub {\n" +
                             "  }\n" +
@@ -169,19 +169,19 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                 new String[] {
-                        "jci/Simple.java"
+                        "jci2/Simple.java"
                 }, reader, store);
 
         assertEquals(toString(result.getErrors()), 0, result.getErrors().length);
         assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 
-        final byte[] clazzBytes = store.read("jci/Simple.class");
-        assertNotNull("jci/Simple.class is not null", clazzBytes);
-        assertTrue("jci/Simple.class is not empty", clazzBytes.length > 0);
+        final byte[] clazzBytes = store.read("jci2/Simple.class");
+        assertNotNull("jci2/Simple.class is not null", clazzBytes);
+        assertTrue("jci2/Simple.class is not empty", clazzBytes.length > 0);
 
-        final byte[] subClazzBytes = store.read("jci/Simple$Sub.class");
-        assertNotNull("jci/Simple$Sub.class is not null", subClazzBytes);
-        assertTrue("jci/Simple$Sub.class is not empty", subClazzBytes.length > 0);
+        final byte[] subClazzBytes = store.read("jci2/Simple$Sub.class");
+        assertNotNull("jci2/Simple$Sub.class is not null", subClazzBytes);
+        assertTrue("jci2/Simple$Sub.class is not empty", subClazzBytes.length > 0);
 
     }
 
@@ -237,17 +237,17 @@
             final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                 private static final long serialVersionUID = 1L;
                 {
-                    put("jci/Func1.java", (
-                            "package jci;\n" +
-                            "import static jci.Func2.func2;" +
+                    put("jci2/Func1.java", (
+                            "package jci2;\n" +
+                            "import static jci2.Func2.func2;" +
                             "public class Func1 {\n" +
                             "  public static boolean func1() throws Exception {\n" +
                             "    return true;\n" +
                             "  }\n" +
                     "}").getBytes());
-                    put("jci/Func2.java", (
-                            "package jci;\n" +
-                            "import static jci.Func1.func1;" +
+                    put("jci2/Func2.java", (
+                            "package jci2;\n" +
+                            "import static jci2.Func1.func1;" +
                             "public class Func2 {\n" +
                             "  public static boolean func2() throws Exception {\n" +
                             "    return true;\n" +
@@ -272,20 +272,20 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                 new String[] {
-                        "jci/Func1.java",
-                        "jci/Func2.java"
+                        "jci2/Func1.java",
+                        "jci2/Func2.java"
                 }, reader, store, this.getClass().getClassLoader(), settings);
 
         assertEquals(toString(result.getErrors()), 0, result.getErrors().length);
         assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 
-        final byte[] clazzBytesFunc1 = store.read("jci/Func1.class");
-        assertNotNull("jci/Func1.class is not null", clazzBytesFunc1);
-        assertTrue("jci/Func1.class is not empty", clazzBytesFunc1.length > 0);
+        final byte[] clazzBytesFunc1 = store.read("jci2/Func1.class");
+        assertNotNull("jci2/Func1.class is not null", clazzBytesFunc1);
+        assertTrue("jci2/Func1.class is not empty", clazzBytesFunc1.length > 0);
 
-        final byte[] clazzBytesFunc2 = store.read("jci/Func2.class");
-        assertNotNull("jci/Func2.class is not null", clazzBytesFunc2);
-        assertTrue("jci/Func2.class is not empty", clazzBytesFunc2.length > 0);
+        final byte[] clazzBytesFunc2 = store.read("jci2/Func2.class");
+        assertNotNull("jci2/Func2.class is not null", clazzBytesFunc2);
+        assertTrue("jci2/Func2.class is not empty", clazzBytesFunc2.length > 0);
     }
 
     /*
@@ -298,8 +298,8 @@
            final private Map<String, byte[]> sources = new HashMap<String, byte[]>() {
                private static final long serialVersionUID = 1L;
                {
-                   put("jci/Simple.java", (
-                       "package jci;\n" +
+                   put("jci2/Simple.java", (
+                       "package jci2;\n" +
                        "public class Simple {\n" +
                        "  public String toString() {\n" +
                        "    return \"Simple\";\n" +
@@ -324,17 +324,17 @@
         final MemoryResourceStore store = new MemoryResourceStore();
         final CompilationResult result = compiler.compile(
                new String[] {
-                       "jci/Simple.java"
+                       "jci2/Simple.java"
                }, reader, store);
     
         assertEquals("Unexpected errors(s): " + toString(result.getErrors()), 0, result.getErrors().length);
     
-        final byte[] clazzBytes = store.read("jci/Simple.class");
-        assertNotNull("Expected to find jci/Simple.class", clazzBytes);
+        final byte[] clazzBytes = store.read("jci2/Simple.class");
+        assertNotNull("Expected to find jci2/Simple.class", clazzBytes);
         assertTrue(clazzBytes.length > 0);
 
-        final byte[] additionalTopLevelBytes = store.read("jci/AdditionalTopLevel.class");
-        assertNotNull("Expected to find jci/AdditionalTopLevel.class", additionalTopLevelBytes);
+        final byte[] additionalTopLevelBytes = store.read("jci2/AdditionalTopLevel.class");
+        assertNotNull("Expected to find jci2/AdditionalTopLevel.class", additionalTopLevelBytes);
         assertTrue(additionalTopLevelBytes.length > 0);
 
         assertEquals("Unexpected warning(s): " + toString(result.getWarnings()), 0, result.getWarnings().length);
diff --git a/core/src/test/java/org/apache/commons/jci/readers/ResourceReaderTestCase.java b/core/src/test/java/org/apache/commons/jci2/readers/ResourceReaderTestCase.java
similarity index 95%
rename from core/src/test/java/org/apache/commons/jci/readers/ResourceReaderTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/readers/ResourceReaderTestCase.java
index f720435..13aea5c 100644
--- a/core/src/test/java/org/apache/commons/jci/readers/ResourceReaderTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/readers/ResourceReaderTestCase.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.readers;
+package org.apache.commons.jci2.readers;
 
-import org.apache.commons.jci.AbstractTestCase;
+import org.apache.commons.jci2.AbstractTestCase;
 
 /**
  * 
diff --git a/core/src/test/java/org/apache/commons/jci/stores/ResourceStoreTestCase.java b/core/src/test/java/org/apache/commons/jci2/stores/ResourceStoreTestCase.java
similarity index 96%
rename from core/src/test/java/org/apache/commons/jci/stores/ResourceStoreTestCase.java
rename to core/src/test/java/org/apache/commons/jci2/stores/ResourceStoreTestCase.java
index 5cd5aac..fa4a4ee 100644
--- a/core/src/test/java/org/apache/commons/jci/stores/ResourceStoreTestCase.java
+++ b/core/src/test/java/org/apache/commons/jci2/stores/ResourceStoreTestCase.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.stores;
+package org.apache.commons.jci2.stores;
 
-import org.apache.commons.jci.AbstractTestCase;
+import org.apache.commons.jci2.AbstractTestCase;
 import org.apache.commons.lang3.ArrayUtils;
 
 /**
diff --git a/examples/pom.xml b/examples/pom.xml
index 2d474a0..151ebf0 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -20,11 +20,11 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
     </parent>
-    <artifactId>commons-jci-examples</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-examples</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI examples</name>
     <description>
         Apache Commons JCI examples.
@@ -35,12 +35,12 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-core</artifactId>
+            <artifactId>commons-jci2-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-jci-eclipse</artifactId>
+            <artifactId>commons-jci2-eclipse</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java b/examples/src/main/java/org/apache/commons/jci2/examples/commandline/CommandlineCompiler.java
similarity index 89%
rename from examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/commandline/CommandlineCompiler.java
index 192756e..596f19f 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/commandline/CommandlineCompiler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.commandline;
+package org.apache.commons.jci2.examples.commandline;
 
 import java.io.File;
 import java.net.URL;
@@ -28,19 +28,19 @@
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
-import org.apache.commons.jci.compilers.CompilationResult;
-import org.apache.commons.jci.compilers.JavaCompiler;
-import org.apache.commons.jci.compilers.JavaCompilerFactory;
-import org.apache.commons.jci.compilers.JavaCompilerSettings;
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.problems.CompilationProblemHandler;
-import org.apache.commons.jci.readers.FileResourceReader;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.FileResourceStore;
-import org.apache.commons.jci.stores.ResourceStore;
+import org.apache.commons.jci2.compilers.CompilationResult;
+import org.apache.commons.jci2.compilers.JavaCompiler;
+import org.apache.commons.jci2.compilers.JavaCompilerFactory;
+import org.apache.commons.jci2.compilers.JavaCompilerSettings;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.problems.CompilationProblemHandler;
+import org.apache.commons.jci2.readers.FileResourceReader;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.FileResourceStore;
+import org.apache.commons.jci2.stores.ResourceStore;
 
 /**
- * A simple front end to jci mimicking the javac command line
+ * A simple front end to jci2 mimicking the javac command line
  *
  * @author tcurdt
  */
@@ -98,7 +98,7 @@
                     .create( "nowarn" ));
 
 //        final HelpFormatter formatter = new HelpFormatter();
-//        formatter.printHelp("jci", options);
+//        formatter.printHelp("jci2", options);
 
         final CommandLineParser parser = new GnuParser();
         final CommandLine cmd = parser.parse(options, args, true);
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/commandline/package.html b/examples/src/main/java/org/apache/commons/jci2/examples/commandline/package.html
similarity index 100%
rename from examples/src/main/java/org/apache/commons/jci/examples/commandline/package.html
rename to examples/src/main/java/org/apache/commons/jci2/examples/commandline/package.html
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/configuration/Configurable.java b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/Configurable.java
similarity index 94%
rename from examples/src/main/java/org/apache/commons/jci/examples/configuration/Configurable.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/configuration/Configurable.java
index 8d7450e..42d6fcd 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/configuration/Configurable.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/Configurable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.configuration;
+package org.apache.commons.jci2.examples.configuration;
 
 import java.util.Properties;
 
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationException.java b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationException.java
similarity index 94%
rename from examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationException.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationException.java
index 0e1bdfa..08506ca 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationException.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.configuration;
+package org.apache.commons.jci2.examples.configuration;
 
 public class ConfigurationException extends Exception {
 
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationReloading.java b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
similarity index 89%
rename from examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationReloading.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
index e197633..5e2498e 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/configuration/ConfigurationReloading.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.configuration;
+package org.apache.commons.jci2.examples.configuration;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -25,10 +25,10 @@
 import java.util.Collection;
 import java.util.Properties;
 
-import org.apache.commons.jci.listeners.FileChangeListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.listeners.FileChangeListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationMonitor;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
 
 /**
  * 
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/configuration/Something.java b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/Something.java
similarity index 94%
rename from examples/src/main/java/org/apache/commons/jci/examples/configuration/Something.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/configuration/Something.java
index 76fa01a..af8eb46 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/configuration/Something.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/Something.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.configuration;
+package org.apache.commons.jci2.examples.configuration;
 
 import java.util.Properties;
 
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/configuration/package.html b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/package.html
similarity index 100%
rename from examples/src/main/java/org/apache/commons/jci/examples/configuration/package.html
rename to examples/src/main/java/org/apache/commons/jci2/examples/configuration/package.html
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/package.html b/examples/src/main/java/org/apache/commons/jci2/examples/package.html
similarity index 100%
rename from examples/src/main/java/org/apache/commons/jci/examples/package.html
rename to examples/src/main/java/org/apache/commons/jci2/examples/package.html
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspGenerator.java b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspGenerator.java
similarity index 97%
rename from examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspGenerator.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspGenerator.java
index 1745a65..4e533a1 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspGenerator.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspGenerator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.serverpages;
+package org.apache.commons.jci2.examples.serverpages;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -26,7 +26,7 @@
 import java.io.Reader;
 import java.io.Writer;
 
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.utils.ConversionUtils;
 
 /**
  * @author tcurdt
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspReader.java
similarity index 93%
rename from examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspReader.java
index a2e8caa..3ba1da4 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/JspReader.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.serverpages;
+package org.apache.commons.jci2.examples.serverpages;
 
 import java.util.Map;
 
-import org.apache.commons.jci.readers.ResourceReader;
+import org.apache.commons.jci2.readers.ResourceReader;
 
 /**
  * @author tcurdt
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
similarity index 91%
rename from examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
rename to examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
index bbd8b25..d7a156b 100644
--- a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.examples.serverpages;
+package org.apache.commons.jci2.examples.serverpages;
 
 import java.io.File;
 import java.io.IOException;
@@ -31,17 +31,17 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.jci.ReloadingClassLoader;
-import org.apache.commons.jci.compilers.CompilationResult;
-import org.apache.commons.jci.compilers.JavaCompilerFactory;
-import org.apache.commons.jci.listeners.CompilingListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
-import org.apache.commons.jci.problems.CompilationProblem;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.MemoryResourceStore;
-import org.apache.commons.jci.stores.TransactionalResourceStore;
-import org.apache.commons.jci.utils.ConversionUtils;
+import org.apache.commons.jci2.ReloadingClassLoader;
+import org.apache.commons.jci2.compilers.CompilationResult;
+import org.apache.commons.jci2.compilers.JavaCompilerFactory;
+import org.apache.commons.jci2.listeners.CompilingListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationMonitor;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.problems.CompilationProblem;
+import org.apache.commons.jci2.readers.ResourceReader;
+import org.apache.commons.jci2.stores.MemoryResourceStore;
+import org.apache.commons.jci2.stores.TransactionalResourceStore;
+import org.apache.commons.jci2.utils.ConversionUtils;
 
 
 /**
diff --git a/examples/src/main/java/org/apache/commons/jci/examples/serverpages/package.html b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/package.html
similarity index 100%
rename from examples/src/main/java/org/apache/commons/jci/examples/serverpages/package.html
rename to examples/src/main/java/org/apache/commons/jci2/examples/serverpages/package.html
diff --git a/examples/src/main/webapp/WEB-INF/web.xml b/examples/src/main/webapp/WEB-INF/web.xml
index c73f2a0..708bfa2 100644
--- a/examples/src/main/webapp/WEB-INF/web.xml
+++ b/examples/src/main/webapp/WEB-INF/web.xml
@@ -19,7 +19,7 @@
 --><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
     <servlet>
         <servlet-name>serverpages</servlet-name>
-        <servlet-class>org.apache.commons.jci.examples.serverpages.ServerPageServlet</servlet-class>
+        <servlet-class>org.apache.commons.jci2.examples.serverpages.ServerPageServlet</servlet-class>
         <init-param>
             <param-name>serverpagesDir</param-name>
             <param-value>/WEB-INF/jsp</param-value>
diff --git a/fam/pom.xml b/fam/pom.xml
index 68c06ff..a7c0b21 100644
--- a/fam/pom.xml
+++ b/fam/pom.xml
@@ -20,11 +20,11 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.commons</groupId>
-        <artifactId>commons-jci</artifactId>
-        <version>1.1-SNAPSHOT</version>
+        <artifactId>commons-jci2</artifactId>
+        <version>2.0-SNAPSHOT</version>
     </parent>
-    <artifactId>commons-jci-fam</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2-fam</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI FileAlterationMonitor</name>
     <description>
         Commons JCI FileAlterationMonitor (FAM) to monitor local filesystems and get notified about changes.
diff --git a/fam/src/main/java/org/apache/commons/jci/listeners/AbstractFilesystemAlterationListener.java b/fam/src/main/java/org/apache/commons/jci2/listeners/AbstractFilesystemAlterationListener.java
similarity index 96%
rename from fam/src/main/java/org/apache/commons/jci/listeners/AbstractFilesystemAlterationListener.java
rename to fam/src/main/java/org/apache/commons/jci2/listeners/AbstractFilesystemAlterationListener.java
index 549f468..cec2c18 100644
--- a/fam/src/main/java/org/apache/commons/jci/listeners/AbstractFilesystemAlterationListener.java
+++ b/fam/src/main/java/org/apache/commons/jci2/listeners/AbstractFilesystemAlterationListener.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.listeners;
+package org.apache.commons.jci2.listeners;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.commons.jci.monitor.FilesystemAlterationListener;
-import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci2.monitor.FilesystemAlterationListener;
+import org.apache.commons.jci2.monitor.FilesystemAlterationObserver;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
diff --git a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationListener.java b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationListener.java
similarity index 97%
rename from fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationListener.java
rename to fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationListener.java
index 0dda2fc..08b856e 100644
--- a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationListener.java
+++ b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationListener.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.monitor;
+package org.apache.commons.jci2.monitor;
 
 import java.io.File;
 
diff --git a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitor.java b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitor.java
similarity index 98%
rename from fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitor.java
rename to fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitor.java
index 443ac90..d05fb50 100644
--- a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitor.java
+++ b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.monitor;
+package org.apache.commons.jci2.monitor;
 
 import java.io.File;
 import java.util.Collections;
diff --git a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserver.java b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserver.java
similarity index 96%
rename from fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserver.java
rename to fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserver.java
index 9227a2f..bfaeb82 100644
--- a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserver.java
+++ b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserver.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.monitor;
+package org.apache.commons.jci2.monitor;
 
 import java.io.File;
 
diff --git a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserverImpl.java
similarity index 99%
rename from fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java
rename to fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserverImpl.java
index 84dc008..0bc471a 100644
--- a/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java
+++ b/fam/src/main/java/org/apache/commons/jci2/monitor/FilesystemAlterationObserverImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.monitor;
+package org.apache.commons.jci2.monitor;
 
 import java.io.File;
 import java.util.HashMap;
diff --git a/fam/src/main/java/org/apache/commons/jci/monitor/package.html b/fam/src/main/java/org/apache/commons/jci2/monitor/package.html
similarity index 100%
rename from fam/src/main/java/org/apache/commons/jci/monitor/package.html
rename to fam/src/main/java/org/apache/commons/jci2/monitor/package.html
diff --git a/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java b/fam/src/test/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitorTestCase.java
similarity index 97%
rename from fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java
rename to fam/src/test/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitorTestCase.java
index 7b4f327..972dcab 100644
--- a/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java
+++ b/fam/src/test/java/org/apache/commons/jci2/monitor/FilesystemAlterationMonitorTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jci.monitor;
+package org.apache.commons.jci2.monitor;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -25,7 +25,7 @@
 import junit.framework.TestCase;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.jci.listeners.AbstractFilesystemAlterationListener;
+import org.apache.commons.jci2.listeners.AbstractFilesystemAlterationListener;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -102,7 +102,7 @@
     }
 
     protected File createTempDirectory() throws IOException {
-        final File tempFile = File.createTempFile("jci", null);
+        final File tempFile = File.createTempFile("jci2", null);
         
         if (!tempFile.delete()) {
             throw new IOException();
diff --git a/pom.xml b/pom.xml
index 45cc32b..4f4292e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,8 +26,8 @@
     </parent>
     <packaging>pom</packaging>
     <groupId>org.apache.commons</groupId>
-    <artifactId>commons-jci</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <artifactId>commons-jci2</artifactId>
+    <version>2.0-SNAPSHOT</version>
     <name>Apache Commons JCI</name>
     <description>
         Apache Commons JCI is a java compiler interface.
@@ -239,7 +239,7 @@
         <commons.jira.id>JCI</commons.jira.id>
         <commons.jira.pid>12310650</commons.jira.pid>
         <!-- configuration bits for cutting a release candidate -->
-        <commons.release.version>1.1</commons.release.version>
+        <commons.release.version>2.0</commons.release.version>
         <commons.rc.version>RC1</commons.rc.version>
     </properties>
 
diff --git a/src/site/xdoc/download_jci.xml b/src/site/xdoc/download_jci.xml
index 3b01f26..c2408a5 100644
--- a/src/site/xdoc/download_jci.xml
+++ b/src/site/xdoc/download_jci.xml
@@ -95,32 +95,32 @@
       </p>
     </subsection>
     </section>
-    <section name="Apache Commons JCI 1.1 ">
+    <section name="Apache Commons JCI 2.0 ">
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a href="[preferred]/commons/jci/binaries/commons-jci-1.1-bin.tar.gz">commons-jci-1.1-bin.tar.gz</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci-1.1-bin.tar.gz.md5">md5</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci-1.1-bin.tar.gz.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/jci/binaries/commons-jci2-2.0-bin.tar.gz">commons-jci2-2.0-bin.tar.gz</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci2-2.0-bin.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci2-2.0-bin.tar.gz.asc">pgp</a></td>
           </tr>
           <tr>
-              <td><a href="[preferred]/commons/jci/binaries/commons-jci-1.1-bin.zip">commons-jci-1.1-bin.zip</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci-1.1-bin.zip.md5">md5</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci-1.1-bin.zip.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/jci/binaries/commons-jci2-2.0-bin.zip">commons-jci2-2.0-bin.zip</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci2-2.0-bin.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/binaries/commons-jci2-2.0-bin.zip.asc">pgp</a></td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a href="[preferred]/commons/jci/source/commons-jci-1.1-src.tar.gz">commons-jci-1.1-src.tar.gz</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci-1.1-src.tar.gz.md5">md5</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci-1.1-src.tar.gz.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/jci/source/commons-jci2-2.0-src.tar.gz">commons-jci2-2.0-src.tar.gz</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci2-2.0-src.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci2-2.0-src.tar.gz.asc">pgp</a></td>
           </tr>
           <tr>
-              <td><a href="[preferred]/commons/jci/source/commons-jci-1.1-src.zip">commons-jci-1.1-src.zip</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci-1.1-src.zip.md5">md5</a></td>
-              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci-1.1-src.zip.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/jci/source/commons-jci2-2.0-src.zip">commons-jci2-2.0-src.zip</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci2-2.0-src.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/jci/source/commons-jci2-2.0-src.zip.asc">pgp</a></td>
           </tr>
         </table>
       </subsection>
diff --git a/src/site/xdoc/usage.xml b/src/site/xdoc/usage.xml
index 215ec4a..29f2bae 100644
--- a/src/site/xdoc/usage.xml
+++ b/src/site/xdoc/usage.xml
@@ -81,8 +81,8 @@
           </p>
 <source><![CDATA[  <dependency>
       <groupId>org.apache.commons</groupId>
-      <artifactId>commons-jci-eclipse</artifactId>
-      <version>1.1</version>
+      <artifactId>commons-jci2-eclipse</artifactId>
+      <version>2.0</version>
   </dependency>
 ]]></source>
           <p>The other artifacts are <code>commons-jci-groovy</code>, <code>commons-jci-janino</code>
