diff --git a/NOTICE.txt b/NOTICE.txt
index c85aaa8..ff96e0e 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,4 +1,4 @@
-Apache JSecurity
+Apache Apache Ki
 Copyright 2008 The Apache Software Foundation
 
 This product includes software developed at
@@ -9,7 +9,7 @@
 public posted version found here:
     http://www.javaspecialists.eu/archive/Issue015.html)
 with continued modifications.  Per Heinz Kabutz: "you have my
-express permission to publish it in Apache JSecurity - please
+express permission to publish it in Apache Apache Ki - please
 leave a link in the source code pointing to my website:
     http://www.javaspecialists.eu
 
diff --git a/README-runtime-requirements.txt b/README-runtime-requirements.txt
index 49a51f8..25fd9c7 100644
--- a/README-runtime-requirements.txt
+++ b/README-runtime-requirements.txt
@@ -1,4 +1,4 @@
-JSecurity Runtime Requirements
+Apache Ki Runtime Requirements
 ------------------------------
 
 All 3rd party dependencies mentioned below are accessible in two ways:
@@ -15,6 +15,6 @@
 
 Feature-based dependencies
 --------------------------
-- .ini based configuration, either for a jsecurity.ini file in the classpath or embedded .ini in the JSecurityFilter
+- .ini based configuration, either for a jsecurity.ini file in the classpath or embedded .ini in the Apache KiFilter
   in web.xml:
   . include Jakarta commons-beanutils-core.jar
diff --git a/build.xml b/build.xml
index a51da58..bc96164 100644
--- a/build.xml
+++ b/build.xml
@@ -18,7 +18,7 @@
   ~ under the License.
   -->
 
-<!-- JSecurity root build file.  If you want to understand how the JSecurity build environment
+<!-- Apache Ki root build file.  If you want to understand how the Apache Ki build environment
      works (useful if you want to build from scratch or join the project as a developer),
      Read this article:
 
@@ -176,17 +176,17 @@
     </target>
 
     <target name="samples.web.deploy" depends="package"
-            description="Deploys the JSecurity quickstart .war">
+            description="Deploys the Apache Ki quickstart .war">
         <ant dir="samples/web" target="deploy"/>
     </target>
 
     <target name="samples.spring.deploy" depends="package"
-            description="Deploys the sample JSecurity/Spring .war">
+            description="Deploys the sample Apache Ki/Spring .war">
         <ant dir="samples/spring" target="deploy"/>
     </target>
 
     <target name="samples.spring-hibernate.deploy" depends="package"
-            description="Deploys the sample JSecurity Spring/Hibernate .war">
+            description="Deploys the sample Apache Ki Spring/Hibernate .war">
         <ant dir="samples/spring-hibernate" target="deploy"/>
     </target>
 
@@ -199,17 +199,17 @@
         <delete dir="${api.dir}" failonerror="false"/>
         <mkdir dir="${api.dir}"/>
 
-        <javadoc destdir="${api.dir}" windowtitle="JSecurity API ${version}"
+        <javadoc destdir="${api.dir}" windowtitle="Apache Ki API ${version}"
                  source="1.5" access="package" author="true" version="true" use="true"
                  defaultexcludes="true"
-                 header='&lt;a href=\"http://www.jsecurity.org/\" target=\"_top\"&gt;JSecurity&lt;/a&gt;'>
+                 header='&lt;a href=\"http://www.jsecurity.org/\" target=\"_top\"&gt;Apache Ki&lt;/a&gt;'>
             <sourcepath refid="javadoc.src"/>
             <arg value="-breakiterator"/>
             <arg value="-J-Xmx128m"/>
             <arg value="-J-XX:MaxPermSize=128m"/>
             <!-- <arg value="-J-Dhttp.proxyHost=${javadoc.proxyhost}"/>
           <arg value="-J-Dhttp.proxyPort=${javadoc.proxyport}"/> -->
-            <doctitle><![CDATA[<h1>JSecurity API ${version}</h1>]]></doctitle>
+            <doctitle><![CDATA[<h1>Apache Ki API ${version}</h1>]]></doctitle>
             <!-- The following <bottom> block is to enable UA tracking via Google Analytics, but it fails the
                  JavaDoc task on a Windows Sun JDK.  It works fine on Mac OS X JavaDoc.  Since we want this UA
                  tracking, we use a Mac to build the release that end-users will download, so we leave this block
@@ -217,7 +217,7 @@
                  run successfully. -->
             <bottom>
                 <![CDATA[
-                <i>Copyright &copy; 2004-2008 <a href="http://www.jsecurity.org/" target="_top">JSecurity</a>.</i>
+                <i>Copyright &copy; 2004-2008 <a href="http://www.jsecurity.org/" target="_top">Apache Ki</a>.</i>
                 <script type="text/javascript">
                     var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
                     document.write(unescape("%3Cscript src=%22" + gaJsHost + "google-analytics.com/ga.js%22 type=%22text/javascript%22%3E%3C/script%3E"));
@@ -544,7 +544,7 @@
     </target>
 
     <target name="release" depends="package,src.zip,makepom,javadoc,doc.all"
-            description="Create all artifacts for a JSecurity release">
+            description="Create all artifacts for a Apache Ki release">
         <property name="release.dir.name" value="${project.name}-${version}"/>
         <property name="release.zip.name" value="${release.dir.name}.zip"/>
         <property name="release.depzip.name" value="${release.dir.name}-with-dependencies.zip"/>
diff --git a/changes.txt b/changes.txt
index e2921fa..1ecee70 100644
--- a/changes.txt
+++ b/changes.txt
@@ -16,10 +16,10 @@
 * DelegatingSubject is now still usable after it is logged out (no invalid exceptions thrown).
   The Subject is now just considered 'anonymous' again at that point.
 
-* ReflectionBuilder (used in JSecurity .ini and web.xml based text configuration) now handles setting
+* ReflectionBuilder (used in Apache Ki .ini and web.xml based text configuration) now handles setting
   primitive attributes correctly, performing proper string-to-primitive conversion (BeanUtils does this automatically).
 
-* ReflectionBuilder (used for JSecurity .ini and web.xml configuration) now supports setting other previously configured
+* ReflectionBuilder (used for Apache Ki .ini and web.xml configuration) now supports setting other previously configured
   objects by '$' reference. For example:
   bar = some.package.class.Bar
   foo = some.package.class.Foo
diff --git a/core/src/org/apache/ki/KiException.java b/core/src/org/apache/ki/KiException.java
index b5e3ac8..3aeae59 100644
--- a/core/src/org/apache/ki/KiException.java
+++ b/core/src/org/apache/ki/KiException.java
@@ -21,7 +21,7 @@
 import java.io.Serializable;
 
 /**
- * Root exception for all JSecurity runtime exceptions.  This class is used as the root instead
+ * Root exception for all Apache Ki runtime exceptions.  This class is used as the root instead
  * of {@link java.lang.SecurityException} to remove the potential for conflicts;  many other
  * frameworks and products (such as J2EE containers) perform special operations when
  * encountering {@link java.lang.SecurityException}.
@@ -32,14 +32,14 @@
 public class KiException extends RuntimeException implements Serializable {
 
     /**
-     * Creates a new JSecurityException.
+     * Creates a new Apache KiException.
      */
     public KiException() {
         super();
     }
 
     /**
-     * Constructs a new JSecurityException.
+     * Constructs a new Apache KiException.
      *
      * @param message the reason for the exception
      */
@@ -48,7 +48,7 @@
     }
 
     /**
-     * Constructs a new JSecurityException.
+     * Constructs a new Apache KiException.
      *
      * @param cause the underlying Throwable that caused this exception to be thrown.
      */
@@ -57,7 +57,7 @@
     }
 
     /**
-     * Constructs a new JSecurityException.
+     * Constructs a new Apache KiException.
      *
      * @param message the reason for the exception
      * @param cause   the underlying Throwable that caused this exception to be thrown.
diff --git a/core/src/org/apache/ki/SecurityUtils.java b/core/src/org/apache/ki/SecurityUtils.java
index d58e9f9..6b992b1 100644
--- a/core/src/org/apache/ki/SecurityUtils.java
+++ b/core/src/org/apache/ki/SecurityUtils.java
@@ -42,7 +42,7 @@
      * runtime environment.
      * <p/>
      * This method is provided as a way of obtaining a <tt>Subject</tt> without having to resort to
-     * implementation-specific methods.  It also allows the JSecurity team to change the underlying implementation of
+     * implementation-specific methods.  It also allows the Apache Ki team to change the underlying implementation of
      * this method in the future depending on requirements/updates without affecting your code that uses it.
      * <p/>
      * <b>Implementation Note:</b> This implementation expects a
@@ -88,13 +88,13 @@
      * <p><b>This method call exists mainly for framework development support.  Application developers should rarely,
      * if ever, need to call this method.</b></p>
      *
-     * <p>The JSecurity development team prefers that SecurityManager instances are non-static application singletons
+     * <p>The Apache Ki development team prefers that SecurityManager instances are non-static application singletons
      * and <em>not</em> VM static singletons.  Application singletons that do not use static memory require some sort
      * of application configuration framework to maintain the application-wide SecurityManager instance for you
      * (for example, Spring or EJB3 environments) such that the object reference does not need to be static.
      *
-     * <p>In these environments, JSecurity acquires Subject data based on the currently executing Thread via its own
-     * framework integration code, and this is the preferred way to use JSecurity.</p>
+     * <p>In these environments, Apache Ki acquires Subject data based on the currently executing Thread via its own
+     * framework integration code, and this is the preferred way to use Apache Ki.</p>
      *
      * <p>However in some environments, such as a standalone desktop application or Applets that do not use Spring or
      * EJB or similar config frameworks, a VM-singleton might make more sense (although the former is still preferred).</p>
diff --git a/core/src/org/apache/ki/aop/MethodInterceptor.java b/core/src/org/apache/ki/aop/MethodInterceptor.java
index 6e819b8..089b9bb 100644
--- a/core/src/org/apache/ki/aop/MethodInterceptor.java
+++ b/core/src/org/apache/ki/aop/MethodInterceptor.java
@@ -40,7 +40,7 @@
 /**
  * A <tt>MethodInterceptor</tt> intercepts a <tt>MethodInvocation</tt> to perform before or after logic (aka 'advice').
  *
- * <p>JSecurity's implementations of this interface mostly have to deal with ensuring a current Subject has the
+ * <p>Apache Ki's implementations of this interface mostly have to deal with ensuring a current Subject has the
  * ability to execute the method before allowing it to continue.
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/aop/MethodInterceptorSupport.java b/core/src/org/apache/ki/aop/MethodInterceptorSupport.java
index 1d8c793..9bf52fc 100644
--- a/core/src/org/apache/ki/aop/MethodInterceptorSupport.java
+++ b/core/src/org/apache/ki/aop/MethodInterceptorSupport.java
@@ -42,7 +42,7 @@
 
 
 /**
- * This class is an abstraction of AOP method interceptor behavior specific to JSecurity that
+ * This class is an abstraction of AOP method interceptor behavior specific to Apache Ki that
  * leaves AOP implementation specifics to be handled by subclass implementations.  This implementation primarily
  * enables a <tt>Log</tt> and makes available the currently executing {@link Subject Subject}.
  *
diff --git a/core/src/org/apache/ki/aop/MethodInvocation.java b/core/src/org/apache/ki/aop/MethodInvocation.java
index d6e40b8..9ee2d1a 100644
--- a/core/src/org/apache/ki/aop/MethodInvocation.java
+++ b/core/src/org/apache/ki/aop/MethodInvocation.java
@@ -40,7 +40,7 @@
 import java.lang.reflect.Method;
 
 /**
- * 3rd-party API independent representation of a method invocation.  This is needed so JSecurity can support other
+ * 3rd-party API independent representation of a method invocation.  This is needed so Apache Ki can support other
  * MethodInvocation instances from other AOP frameworks/APIs.
  *
  * @author Jeremy Haile
diff --git a/core/src/org/apache/ki/authc/AbstractAuthenticator.java b/core/src/org/apache/ki/authc/AbstractAuthenticator.java
index 77c3f03..e8a5ae0 100644
--- a/core/src/org/apache/ki/authc/AbstractAuthenticator.java
+++ b/core/src/org/apache/ki/authc/AbstractAuthenticator.java
@@ -238,11 +238,11 @@
      *
      * @param token the authentication token encapsulating the user's login information.
      * @return an <tt>AuthenticationInfo</tt> object encapsulating the user's account information
-     *         important to JSecurity.
+     *         important to Apache Ki.
      * @throws AuthenticationException if there is a problem logging in the user.
      */
     protected abstract AuthenticationInfo doAuthenticate(AuthenticationToken token)
             throws AuthenticationException;
 
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authc/Account.java b/core/src/org/apache/ki/authc/Account.java
index c856a05..c389b5f 100644
--- a/core/src/org/apache/ki/authc/Account.java
+++ b/core/src/org/apache/ki/authc/Account.java
@@ -28,10 +28,10 @@
  * This interface can be useful when an Realm implementation finds it more convenient to use a single object to
  * encapsulate both the authentication and authorization information used by both authc and authz operations.
  * <p/>
- * <b>Please Note</b>:  Since JSecurity sometimes logs account operations, please ensure your Account's <code>toString()</code>
+ * <b>Please Note</b>:  Since Apache Ki sometimes logs account operations, please ensure your Account's <code>toString()</code>
  * implementation does <em>not</em> print out account credentials (password, etc), as these might be viewable to
  * someone reading your logs.  This is good practice anyway, and account principals should rarely (if ever) be printed
- * out for any reason.  If you're using JSecurity's default implementations of this interface, they only ever print the
+ * out for any reason.  If you're using Apache Ki's default implementations of this interface, they only ever print the
  * account {@link #getPrincipals() principals}, so you do not need to do anything additional.
  *
  * @author Jeremy Haile
@@ -41,4 +41,4 @@
  */
 public interface Account extends AuthenticationInfo, AuthorizationInfo {
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authc/AuthenticationInfo.java b/core/src/org/apache/ki/authc/AuthenticationInfo.java
index 84a800a..d748063 100644
--- a/core/src/org/apache/ki/authc/AuthenticationInfo.java
+++ b/core/src/org/apache/ki/authc/AuthenticationInfo.java
@@ -34,7 +34,7 @@
  * <code>AuthenticationInfo</code>).
  * <p/>
  * Because the act of authentication (log-in) is orthoganal to authorization (access control), this interface is
- * intended to represent only the account data needed by JSecurity during an authentication attempt.  JSecurity also
+ * intended to represent only the account data needed by Apache Ki during an authentication attempt.  Apache Ki also
  * has a parallel {@link org.apache.ki.authz.AuthorizationInfo AuthorizationInfo} interface for use during the
  * authorization process that references access control data such as roles and permissions.
  * <p/>
@@ -45,10 +45,10 @@
  * <code>Account</code> interface for a given <code>Realm</code> is entirely based on your application's needs or your
  * preferences.
  *
- * <p><b>Pleae note:</b>  Since JSecurity sometimes logs authentication operations, please ensure your AuthenticationInfo's
+ * <p><b>Pleae note:</b>  Since Apache Ki sometimes logs authentication operations, please ensure your AuthenticationInfo's
  * <code>toString()</code> implementation does <em>not</em> print out account credentials (password, etc), as these might be viewable to
  * someone reading your logs.  This is good practice anyway, and account credentials should rarely (if ever) be printed
- * out for any reason.  If you're using JSecurity's default implementations of this interface, they only ever print the
+ * out for any reason.  If you're using Apache Ki's default implementations of this interface, they only ever print the
  * account {@link #getPrincipals() principals}, so you do not need to do anything additional.</p>
  *
  * @author Jeremy Haile
@@ -78,7 +78,7 @@
     /**
      * Returns the credentials associated with the corresponding Subject.  A credential verifies one or more of the
      * {@link #getPrincipals() principals} associated with the Subject, such as a password or private key.  Credentials
-     * are used by JSecurity particularly during the authentication process to ensure that submitted credentials
+     * are used by Apache Ki particularly during the authentication process to ensure that submitted credentials
      * during a login attempt match exactly the credentials here in the <code>AuthenticationInfo</code> instance.
      *
      * @return the credentials associated with the corresponding Subject.
diff --git a/core/src/org/apache/ki/authc/AuthenticationToken.java b/core/src/org/apache/ki/authc/AuthenticationToken.java
index 3f23cd8..7b1aa16 100644
--- a/core/src/org/apache/ki/authc/AuthenticationToken.java
+++ b/core/src/org/apache/ki/authc/AuthenticationToken.java
@@ -35,7 +35,7 @@
  * <p>Because applications represent user data and credentials in different ways, implementations
  * of this interface are application-specific.  You are free to acquire a user's principals and
  * credentials however you wish (e.g. web form, Swing form, fingerprint identification, etc) and
- * then submit them to the JSecurity framework in the form of an implementation of this
+ * then submit them to the Apache Ki framework in the form of an implementation of this
  * interface.
  *
  * <p>If your application's authentication process is  username/password based
@@ -92,4 +92,4 @@
      */
     Object getCredentials();
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authc/Authenticator.java b/core/src/org/apache/ki/authc/Authenticator.java
index 8a95838..fc2e8db 100644
--- a/core/src/org/apache/ki/authc/Authenticator.java
+++ b/core/src/org/apache/ki/authc/Authenticator.java
@@ -20,15 +20,15 @@
 
 /**
  * An Authenticator is responsible for authenticating accounts in an application.  It
- * is one of the primary entry points into the JSecurity API.
+ * is one of the primary entry points into the Apache Ki API.
  * <p/>
  * Although not a requirement, there is usually a single 'master' Authenticator configured for
  * an application.  Enabling Pluggable Authentication Module (PAM) behavior
  * (Two Phase Commit, etc.) is usually achieved by the single {@code Authenticator} coordinating
  * and interacting with an application-configured set of {@link org.apache.ki.realm.Realm Realm}s.
  * <p/>
- * Note that most JSecurity users will not interact with an {@code Authenticator} instance directly.
- * JSecurity's default architecture is based on an overall {@code SecurityManager} which typically
+ * Note that most Apache Ki users will not interact with an {@code Authenticator} instance directly.
+ * Apache Ki's default architecture is based on an overall {@code SecurityManager} which typically
  * wraps an {@code Authenticator} instance.
  *
  * @author Les Hazlewood
@@ -44,7 +44,7 @@
      * Authenticates a user based on the submitted {@code AuthenticationToken}.
      * <p/>
      * If the authentication is successful, an {@link AuthenticationInfo} instance is returned that represents the
-     * user's account data relevant to JSecurity.  This returned object is generally used in turn to construct a
+     * user's account data relevant to Apache Ki.  This returned object is generally used in turn to construct a
      * {@code Subject} representing a more complete security-specific 'view' of an account that also allows access to
      * a {@code Session}.
      *
diff --git a/core/src/org/apache/ki/authc/LogoutAware.java b/core/src/org/apache/ki/authc/LogoutAware.java
index 75dc376..2bb360b 100644
--- a/core/src/org/apache/ki/authc/LogoutAware.java
+++ b/core/src/org/apache/ki/authc/LogoutAware.java
@@ -25,7 +25,7 @@
  *
  * <p>As it is an SPI interface, it is really intended for SPI implementors such as those implementing Realms.
  *
- * <p>All of JSecurity's concrete Realm implementations implement this interface as a convenience for those wishing
+ * <p>All of Apache Ki's concrete Realm implementations implement this interface as a convenience for those wishing
  * to subclass them.
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/authc/UsernamePasswordToken.java b/core/src/org/apache/ki/authc/UsernamePasswordToken.java
index 7c16d96..03b0585 100644
--- a/core/src/org/apache/ki/authc/UsernamePasswordToken.java
+++ b/core/src/org/apache/ki/authc/UsernamePasswordToken.java
@@ -276,7 +276,7 @@
      * is unknown or explicitly omitted.  It is up to the Authenticator implementation processing this token if
      * an authentication attempt without an inetAddress is valid or not.
      *
-     * <p>(JSecurity's default Authenticator
+     * <p>(Apache Ki's default Authenticator
      * allows <tt>null</tt> IPs to support localhost and proxy server environments).</p>
      *
      * @return the inetAddress from where the authentication attempt occurs, or <tt>null</tt> if it is unknown or
@@ -291,7 +291,7 @@
      * Sets the inetAddress from where the authentication attempt occurs.  It is up to the Authenticator
      * implementation processing this token if an authentication attempt without an inetAddress is valid or not.
      *
-     * <p>(JSecurity's default Authenticator
+     * <p>(Apache Ki's default Authenticator
      * allows <tt>null</tt> IPs to allow localhost and proxy server environments).</p>
      *
      * @param inetAddress the inetAddress from where the authentication attempt occurs.
@@ -367,4 +367,4 @@
         return sb.toString();
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authc/credential/HashedCredentialsMatcher.java b/core/src/org/apache/ki/authc/credential/HashedCredentialsMatcher.java
index fe53073..aba873f 100644
--- a/core/src/org/apache/ki/authc/credential/HashedCredentialsMatcher.java
+++ b/core/src/org/apache/ki/authc/credential/HashedCredentialsMatcher.java
@@ -48,7 +48,7 @@
  * salting and multiple iterations and why you might want to use them. (Note of sections 5
  * &quot;Why add salt?&quot; and 6 "Hardening against the attacker's attack").
  *
- * <p>We should also note here that all of JSecurity's Hash implementations (for example,
+ * <p>We should also note here that all of Apache Ki's Hash implementations (for example,
  * {@link org.apache.ki.crypto.hash.Md5Hash Md5Hash}, {@link org.apache.ki.crypto.hash.Sha1Hash Sha1Hash}, etc)
  * support salting and multiple hash iterations via overloaded constructors.</p>
  *
@@ -91,7 +91,7 @@
      * Returns <tt>true</tt> if the system's stored credential hash is Hex encoded, <tt>false</tt> if it
      * is Base64 encoded.
      *
-     * <p>Default value is <tt>true</tt> for convenience - all of JSecurity's {@link Hash Hash#toString()}
+     * <p>Default value is <tt>true</tt> for convenience - all of Apache Ki's {@link Hash Hash#toString()}
      * implementations return Hex encoded values by default, making this class's use with those implementations
      * easier.</p>
      *
@@ -108,7 +108,7 @@
      * <p>A value of <tt>true</tt> will cause this class to decode the system credential from Hex, a
      * value of <tt>false</tt> will cause this class to decode the system credential from Base64.</p>
      *
-     * <p>Unless overridden via this method, the default value is <tt>true</tt> for convenience - all of JSecurity's
+     * <p>Unless overridden via this method, the default value is <tt>true</tt> for convenience - all of Apache Ki's
      * {@link Hash Hash#toString()} implementations return Hex encoded values by default, making this class's use with
      * those implementations easier.</p>.
      *
diff --git a/core/src/org/apache/ki/authc/package-info.java b/core/src/org/apache/ki/authc/package-info.java
index ed76fa5..df4be83 100644
--- a/core/src/org/apache/ki/authc/package-info.java
+++ b/core/src/org/apache/ki/authc/package-info.java
@@ -19,11 +19,11 @@
 /**
  * Core interfaces and exceptions concerning Authentication (the act of logging-in).
  * <p/>
- * JSecurity abbreviates the word 'AuthentiCation' as <tt>authc</tt> to distinguish it seperately from
+ * Apache Ki abbreviates the word 'AuthentiCation' as <tt>authc</tt> to distinguish it seperately from
  * 'AuthoriZation', abbreviated as <tt>authz</tt>.
  * <p/>
  * The primary item of interest in this package is the <tt>Authenticator</tt> interface, which acts as the
  * entry point (facade) to all other other authentication components. Other components, interfaces and
  * exceptions are here to support <tt>Authenticator</tt> implementations.
  */
-package org.ki.authc;
\ No newline at end of file
+package org.ki.authc;
diff --git a/core/src/org/apache/ki/authc/pam/AbstractAuthenticationStrategy.java b/core/src/org/apache/ki/authc/pam/AbstractAuthenticationStrategy.java
index bf872d9..4257bf6 100644
--- a/core/src/org/apache/ki/authc/pam/AbstractAuthenticationStrategy.java
+++ b/core/src/org/apache/ki/authc/pam/AbstractAuthenticationStrategy.java
@@ -29,7 +29,7 @@
 
 
 /**
- * Abstract base implementation for JSecurity's concrete <code>AuthenticationStrategy</code>
+ * Abstract base implementation for Apache Ki's concrete <code>AuthenticationStrategy</code>
  * implementations.
  *
  * @author Jeremy Haile
diff --git a/core/src/org/apache/ki/authc/pam/ModularRealmAuthenticator.java b/core/src/org/apache/ki/authc/pam/ModularRealmAuthenticator.java
index 2b266ca..59fc8c8 100644
--- a/core/src/org/apache/ki/authc/pam/ModularRealmAuthenticator.java
+++ b/core/src/org/apache/ki/authc/pam/ModularRealmAuthenticator.java
@@ -36,8 +36,8 @@
 
 /**
  * A <tt>ModularRealmAuthenticator</tt> delgates account lookups to a pluggable (modular) collection of
- * {@link Realm}s.  This enables PAM (Pluggable Authentication Module) behavior in JSecurity.
- * In addition to authorization duties, a JSecurity Realm can also be thought of a PAM 'module'.
+ * {@link Realm}s.  This enables PAM (Pluggable Authentication Module) behavior in Apache Ki.
+ * In addition to authorization duties, a Apache Ki Realm can also be thought of a PAM 'module'.
  *
  * <p>Using this Authenticator allows you to &quot;plug-in&quot; your own
  * <tt>Realm</tt>s as you see fit.  Common realms are those based on accessing
@@ -322,7 +322,7 @@
      * <code>((LogoutAware)realm).onLogout(principals)</code> to allow each realm the opportunity to perform
      * logout/cleanup operations during an user-logout.
      *
-     * <p>JSecurity's Realm implementations all implement the <tt>LogoutAware</tt> interface by default and can be
+     * <p>Apache Ki's Realm implementations all implement the <tt>LogoutAware</tt> interface by default and can be
      * overridden for realm-specific logout logic.
      *
      * @param principals the application-specific Subject/user identifier.
@@ -338,4 +338,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authc/pam/package-info.java b/core/src/org/apache/ki/authc/pam/package-info.java
index 446c735..e0ddaff 100644
--- a/core/src/org/apache/ki/authc/pam/package-info.java
+++ b/core/src/org/apache/ki/authc/pam/package-info.java
@@ -18,7 +18,7 @@
  */
 /**
  * Support for <em>PAM</em>, or <b>P</b>luggable <b>A</b>uthentication <b>M</b>odules, which is
- * the capability to authenticate a user against multiple configurable (pluggable) <em>modules</em> (JSecurity
+ * the capability to authenticate a user against multiple configurable (pluggable) <em>modules</em> (Apache Ki
  * calls these {@link org.ki.realm.Realm Realm}s).
  * <p/>
  * The primary class of interest here is the {@link org.ki.authc.pam.ModularRealmAuthenticator ModularRealmAuthenticator}
@@ -29,4 +29,4 @@
  * application's needs using an injectible
  * {@link AuthenticationStrategy}.
  */
-package org.ki.authc.pam;
\ No newline at end of file
+package org.ki.authc.pam;
diff --git a/core/src/org/apache/ki/authz/AuthorizationInfo.java b/core/src/org/apache/ki/authz/AuthorizationInfo.java
index f74bc2e..9da35ec 100644
--- a/core/src/org/apache/ki/authz/AuthorizationInfo.java
+++ b/core/src/org/apache/ki/authz/AuthorizationInfo.java
@@ -39,8 +39,8 @@
  * or both depending on your preference and needs.
  * <p/>
  * Because the act of authorization (access control) is orthoganal to authentication (log-in), this interface is
- * intended to represent only the account data needed by JSecurity during an access control check
- * (role, permission, etc).  JSecurity also has a parallel
+ * intended to represent only the account data needed by Apache Ki during an access control check
+ * (role, permission, etc).  Apache Ki also has a parallel
  * {@link org.apache.ki.authc.AuthenticationInfo AuthenticationInfo} interface for use during the authentication
  * process that represents identity data such as principals and credentials.
  * <p/>
@@ -77,7 +77,7 @@
      * {@link org.apache.ki.authz.permission.PermissionResolver PermissionResolver}
      * in order to perform the actual permission check.  This is not a requirement of course, since <code>Realm</code>s
      * can perform security checks in whatever manner deemed necessary, but this explains the conversion mechanism that
-     * most JSecurity Realms execute for string-based permission checks.
+     * most Apache Ki Realms execute for string-based permission checks.
      *
      * @return all string-based permissions assigned to the corresponding Subject.
      */
@@ -91,4 +91,4 @@
      * @return all type-safe {@link Permission Permission}s assigned to the corresponding Subject.
      */
     Collection<Permission> getObjectPermissions();
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/authz/Authorizer.java b/core/src/org/apache/ki/authz/Authorizer.java
index bbd9cb8..18fb6e3 100644
--- a/core/src/org/apache/ki/authz/Authorizer.java
+++ b/core/src/org/apache/ki/authz/Authorizer.java
@@ -37,7 +37,7 @@
  * {@link Permission Permission} instances. They are a convenience allowing the caller to use a String representation of
  * a {@link Permission Permission} if desired.  Most implementations of this interface will simply convert these
  * String values to {@link Permission Permission} instances and then just call the corresponding type-safe method.
- * (JSecurity's default implementations do String-to-Permission conversion for these methods using
+ * (Apache Ki's default implementations do String-to-Permission conversion for these methods using
  * {@link org.apache.ki.authz.permission.PermissionResolver PermissionResolver}s.)
  *
  * <p>These overloaded *Permission methods <em>do</em> forego type-saftey for the benefit of convenience and simplicity,
diff --git a/core/src/org/apache/ki/authz/AuthorizingAccount.java b/core/src/org/apache/ki/authz/AuthorizingAccount.java
index fc5bdca..5e48358 100644
--- a/core/src/org/apache/ki/authz/AuthorizingAccount.java
+++ b/core/src/org/apache/ki/authz/AuthorizingAccount.java
@@ -29,7 +29,7 @@
  * implementations that want to cache authorization state when doing an account lookup so multiple authorization checks
  * do not need to access the Realm's underlying data store repeatedly.
  * <p/>
- * Of course, an <tt>AuthorizingAccount</tt> concept is only a convenience mechansim if JSecurity account caching
+ * Of course, an <tt>AuthorizingAccount</tt> concept is only a convenience mechansim if Apache Ki account caching
  * is enabled.  Realm implementations are free to ignore this interface entirely and implement/override any of their
  * <tt>Realm</tt>'s {@link Authorizer Authorizer} methods to execute the authorization checks as they see fit.
  * ({@link org.apache.ki.realm.Realm Realm} is a sub-interface of {@link Authorizer Authorizer} and therefore must
@@ -40,7 +40,7 @@
  * return an {@link Account} instance, or if you want fine-grained control over authorization behavior, extend
  * a subclass of {@link org.apache.ki.realm.AuthorizingRealm} and implement your own security checks in the
  * Realm itself instead of forcing this logic in your entity/domain classes where it could be error prone and
- * unnecessarily couple these objects to JSecurity.
+ * unnecessarily couple these objects to Apache Ki.
  *
  * @author Jeremy Haile
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/authz/Permission.java b/core/src/org/apache/ki/authz/Permission.java
index f951135..4317c9a 100644
--- a/core/src/org/apache/ki/authz/Permission.java
+++ b/core/src/org/apache/ki/authz/Permission.java
@@ -27,7 +27,7 @@
  * Granting access to an application functionality or a particular resource is done by the application's security
  * configuration, typically by assigning Permissions to users, roles and/or groups.
  *
- * <p>Most typical systems are what the JSecurity team calls <em>role-based</em> in nature, where a role represents
+ * <p>Most typical systems are what the Apache Ki team calls <em>role-based</em> in nature, where a role represents
  * common behavior for certain user types.  For example, a system might have an <em>Aministrator</em> role, a
  * <em>User</em> or <em>Guest</em> roles, etc.
  *
@@ -50,13 +50,13 @@
  * and groups can all be created, configured and/or deleted at runtime.  This enables  an extremely powerful security
  * model.
  *
- * <p>A benefit to JSecurity is that, although it assumes most systems are based on these types of static role or
+ * <p>A benefit to Apache Ki is that, although it assumes most systems are based on these types of static role or
  * dynamic role w/ permission schemes, it does not require a system to model their security data this way - all
  * Permission checks are relegated to {@link org.apache.ki.realm.Realm} implementations, and only those implementatons
  * really determine how a user 'has' a permission or not.  The Realm could use the semantics described here, or it
  * could utilize some other mechanism entirely - it is always up to the application developer.
  *
- * <p>JSecurity provides a very powerful default implementation of this interface in the form of the
+ * <p>Apache Ki provides a very powerful default implementation of this interface in the form of the
  * {@link org.apache.ki.authz.permission.WildcardPermission WildcardPermission}.  We highly recommend that you
  * investigate this class before trying to implement your own <code>Permission</code>s.
  *
diff --git a/core/src/org/apache/ki/authz/annotation/RequiresUser.java b/core/src/org/apache/ki/authz/annotation/RequiresUser.java
index 792d17f..0c74bc9 100644
--- a/core/src/org/apache/ki/authz/annotation/RequiresUser.java
+++ b/core/src/org/apache/ki/authz/annotation/RequiresUser.java
@@ -28,7 +28,7 @@
  * accessed or invoked.  This is <em>less</em> restrictive than the {@link RequiresAuthentication RequiresAuthentication}
  * annotation.
  * <p/>
- * JSecurity defines a &quot;user&quot; as a Subject that is either
+ * Apache Ki defines a &quot;user&quot; as a Subject that is either
  * &quot;remembered&quot; <b><em>or</em></b> authenticated:
  * <ul>
  * <li>An <b>authenticated</b> user is a Subject that has successfully logged in (proven their identity)
diff --git a/core/src/org/apache/ki/authz/package-info.java b/core/src/org/apache/ki/authz/package-info.java
index 66550b2..b0f364d 100644
--- a/core/src/org/apache/ki/authz/package-info.java
+++ b/core/src/org/apache/ki/authz/package-info.java
@@ -19,20 +19,20 @@
 /**
  * Core interfaces and exceptions supporting Authorization (access control).
  * <p/>
- * JSecurity abbreviates the word 'AuthoriZation' as <tt>authz</tt> to distinguish it seperately from
+ * Apache Ki abbreviates the word 'AuthoriZation' as <tt>authz</tt> to distinguish it seperately from
  * 'AuthentiCation', abbreviated as <tt>authc</tt>.
  * <p/>
- * This package's primary interface of interest, which is the core of JSecurity authorization functionality,
+ * This package's primary interface of interest, which is the core of Apache Ki authorization functionality,
  * is the <tt>Authorizer</tt>. This interface handles all aspects of principal-related security and is the
- * facade to all other JSecurity authorization components.
+ * facade to all other Apache Ki authorization components.
  * <p/>
- * JSecurity has the ability to authorize subjects (a.k.a. users) without being intrusive to the application's
+ * Apache Ki has the ability to authorize subjects (a.k.a. users) without being intrusive to the application's
  * domain model. Most applications will utilize the concepts of <tt>group</tt>s, <tt>role</tt>s, and
- * <tt>permission</tt>s, but JSecurity tries to be as non-invasive as possible doesn't require any such
+ * <tt>permission</tt>s, but Apache Ki tries to be as non-invasive as possible doesn't require any such
  * interfaces (although a Permission interface is made available for fine-grained access control policies if
- * you want to use JSecurity's permission support out-of-the-box).
+ * you want to use Apache Ki's permission support out-of-the-box).
  * <p/>
  * Although it is possible for applications to implement this and other interfaces directly, it is not
- * recommended. JSecurity already has base implementations which should be suitable for 99% of deployments.
+ * recommended. Apache Ki already has base implementations which should be suitable for 99% of deployments.
  */
-package org.ki.authz;
\ No newline at end of file
+package org.ki.authz;
diff --git a/core/src/org/apache/ki/authz/permission/PermissionResolver.java b/core/src/org/apache/ki/authz/permission/PermissionResolver.java
index 3d83f88..1d690b1 100644
--- a/core/src/org/apache/ki/authz/permission/PermissionResolver.java
+++ b/core/src/org/apache/ki/authz/permission/PermissionResolver.java
@@ -30,18 +30,18 @@
  * However, any resolver may be configured if an application wishes to use different
  * {@link org.apache.ki.authz.Permission} implementations.</p>
  *
- * <p>A <tt>PermissionResolver</tt> is used by many JSecurity components such as annotations, property file
+ * <p>A <tt>PermissionResolver</tt> is used by many Apache Ki components such as annotations, property file
  * configuration, URL configuration, etc.  It is useful whenever a String representation of a permission is specified
  * and that String needs to be converted to a Permission instance before executing a security check.</p>
  * <p/>
- * JSecurity chooses to support {@link WildcardPermission Wildcardpermission}s by default in almost all components and
+ * Apache Ki chooses to support {@link WildcardPermission Wildcardpermission}s by default in almost all components and
  * we do that in the form of the {@link WildcardPermissionResolver WildcardPermissionResolver}.   One of the nice
  * things about <code>WildcardPermission</code>s being supported by default is that it makes it very easy to
  * store complex permissions in the database - and also makes it very easy to represent permissions in JSP files,
  * annotations, etc., where a simple string representation is useful.
  * <p/>
- * Although this happens to be the JSecurity default, you are of course free to provide custom
- * String-to-Permission conversion by providing JSecurity components any instance of this interface.
+ * Although this happens to be the Apache Ki default, you are of course free to provide custom
+ * String-to-Permission conversion by providing Apache Ki components any instance of this interface.
  *
  * @author Jeremy Haile
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/authz/permission/WildcardPermission.java b/core/src/org/apache/ki/authz/permission/WildcardPermission.java
index 1937589..772c616 100644
--- a/core/src/org/apache/ki/authz/permission/WildcardPermission.java
+++ b/core/src/org/apache/ki/authz/permission/WildcardPermission.java
@@ -97,8 +97,8 @@
  * <code>subject.isPermitted( &quot;newsletter:edit:13&quot; )</code>
  * <p/>
  * There is no limit to the number of tokens that can be used, so it is up to your imagination in terms of ways that
- * this could be used in your application.  However, the JSecurity team likes to standardize some common usages shown
- * above to help people get started and provide consistency in the JSecurity community.
+ * this could be used in your application.  However, the Apache Ki team likes to standardize some common usages shown
+ * above to help people get started and provide consistency in the Apache Ki community.
  *
  * @author Jeremy Haile
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/authz/permission/package-info.java b/core/src/org/apache/ki/authz/permission/package-info.java
index e94317e..286fe93 100644
--- a/core/src/org/apache/ki/authz/permission/package-info.java
+++ b/core/src/org/apache/ki/authz/permission/package-info.java
@@ -17,11 +17,11 @@
  * under the License.
  */
 /**
- * Support and default implementations for JSecurity's {@link org.apache.ki.authz.Permission Permission}
+ * Support and default implementations for Apache Ki's {@link org.apache.ki.authz.Permission Permission}
  * interface.
  * <p/>
  * Also note the {@link org.apache.ki.authz.permission.PermissionResolver PermissionResolver} interface, as
- * it plays an important part in many of JSecurity's {@link org.apache.ki.realm.Realm Realm} implementations
+ * it plays an important part in many of Apache Ki's {@link org.apache.ki.realm.Realm Realm} implementations
  * and AOP support.
  */
-package org.ki.authz.permission;
\ No newline at end of file
+package org.ki.authz.permission;
diff --git a/core/src/org/apache/ki/cache/Cache.java b/core/src/org/apache/ki/cache/Cache.java
index ac34cd0..1c0a63a 100644
--- a/core/src/org/apache/ki/cache/Cache.java
+++ b/core/src/org/apache/ki/cache/Cache.java
@@ -23,10 +23,10 @@
 /**
  * A Cache efficiently stores temporary objects primarily to improve an application's performance.
  *
- * <p>JSecurity doesn't implement a full Cache mechanism itself, since that is outside the core competency of a
+ * <p>Apache Ki doesn't implement a full Cache mechanism itself, since that is outside the core competency of a
  * Security framework.  Instead, this interface provides an abstraction (wrapper) API on top of an underlying
  * cache framework's cache instance (e.g. JCache, Ehcache, JCS, OSCache, JBossCache, TerraCotta, Coherence,
- * GigaSpaces, etc, etc), allowing a JSecurity user to configure any cache mechanism they choose.
+ * GigaSpaces, etc, etc), allowing a Apache Ki user to configure any cache mechanism they choose.
  *
  * @author Les Hazlewood
  * @author Jeremy Haile
@@ -88,4 +88,4 @@
      * @return a view of all of the values contained in this cache.
      */
     public Set values();
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/cache/CacheException.java b/core/src/org/apache/ki/cache/CacheException.java
index 7f2b8dc..b4cce0e 100644
--- a/core/src/org/apache/ki/cache/CacheException.java
+++ b/core/src/org/apache/ki/cache/CacheException.java
@@ -22,7 +22,7 @@
 
 
 /**
- * Root class of all JSecurity exceptions related to caching operations.
+ * Root class of all Apache Ki exceptions related to caching operations.
  *
  * @author Jeremy Haile
  * @author Les Hazlewood
@@ -64,4 +64,4 @@
     public CacheException(String message, Throwable cause) {
         super(message, cause);
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/cache/CacheManager.java b/core/src/org/apache/ki/cache/CacheManager.java
index 3608743..bafdb09 100644
--- a/core/src/org/apache/ki/cache/CacheManager.java
+++ b/core/src/org/apache/ki/cache/CacheManager.java
@@ -21,10 +21,10 @@
 /**
  * A CacheManager provides and maintains the lifecycles of {@link Cache Cache} instances.
  *
- * <p>JSecurity doesn't implement a full Cache mechanism itself, since that is outside the core competency of a
+ * <p>Apache Ki doesn't implement a full Cache mechanism itself, since that is outside the core competency of a
  * Security framework.  Instead, this interface provides an abstraction (wrapper) API on top of an underlying
  * cache framework's main Manager component (e.g. JCache, Ehcache, JCS, OSCache, JBossCache, TerraCotta, Coherence,
- * GigaSpaces, etc, etc), allowing a JSecurity user to configure any cache mechanism they choose.
+ * GigaSpaces, etc, etc), allowing a Apache Ki user to configure any cache mechanism they choose.
  *
  * @author Les Hazlewood
  * @since 0.9
@@ -40,4 +40,4 @@
      * @throws CacheException if there is an error acquiring the Cache instance.
      */
     public Cache getCache(String name) throws CacheException;
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/cache/HashtableCache.java b/core/src/org/apache/ki/cache/HashtableCache.java
index 6d854a6..862d470 100644
--- a/core/src/org/apache/ki/cache/HashtableCache.java
+++ b/core/src/org/apache/ki/cache/HashtableCache.java
@@ -21,7 +21,7 @@
 import java.util.Hashtable;
 
 /**
- * An implementation of the JSecurity {@link Cache} interface that uses a
+ * An implementation of the Apache Ki {@link Cache} interface that uses a
  * {@link Hashtable} to store cached objects.  This implementation is only suitable for
  * development/testing use as it is prone to a potential memory leak if objects are not explicitly removed
  * from the cache.
@@ -47,4 +47,4 @@
         super(name, new Hashtable());
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/codec/Base64.java b/core/src/org/apache/ki/codec/Base64.java
index 84841ed..bf0fde1 100644
--- a/core/src/org/apache/ki/codec/Base64.java
+++ b/core/src/org/apache/ki/codec/Base64.java
@@ -28,7 +28,7 @@
  *
  * <p>This class was borrowed from Apache Commons Codec SVN repository (rev. 618419) with modifications
  * to enable Base64 conversion without a full dependecny on Commons Codec.  We didn't want to reinvent the wheel of
- * great work they've done, but also didn't want to force every JSecurity user to depend on the commons-codec.jar</p>
+ * great work they've done, but also didn't want to force every Apache Ki user to depend on the commons-codec.jar</p>
  *
  * <p>As per the Apache 2.0 license, the original copyright notice and all author and copyright information have
  * remained in tact.</p>
@@ -223,7 +223,7 @@
     }
 
     /**
-     * Base64 encodes the specified byte array and then encodes it as a String using JSecurity's preferred character
+     * Base64 encodes the specified byte array and then encodes it as a String using Apache Ki's preferred character
      * encoding (UTF-8).
      *
      * @param bytes the byte array to Base64 encode.
@@ -503,4 +503,4 @@
         return packedData;
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/codec/CodecSupport.java b/core/src/org/apache/ki/codec/CodecSupport.java
index f9e40dd..aa93e81 100644
--- a/core/src/org/apache/ki/codec/CodecSupport.java
+++ b/core/src/org/apache/ki/codec/CodecSupport.java
@@ -35,12 +35,12 @@
 public abstract class CodecSupport {
 
     /**
-     * JSecurity's default preferred Character encoding, equal to <b><code>UTF-8</code></b>.
+     * Apache Ki's default preferred Character encoding, equal to <b><code>UTF-8</code></b>.
      */
     public static final String PREFERRED_ENCODING = "UTF-8";
 
     /**
-     * Converts the specified character array to a byte array using the JSecurity's preferred encoding (UTF-8).
+     * Converts the specified character array to a byte array using the Apache Ki's preferred encoding (UTF-8).
      * <p/>
      * This is a convenience method equivalent to calling the {@link #toBytes(String,String)} method with a
      * a wrapping String and {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}, i.e.
@@ -72,11 +72,11 @@
     }
 
     /**
-     * Converts the specified source argument to a byte array with JSecurity's
+     * Converts the specified source argument to a byte array with Apache Ki's
      * {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
      *
      * @param source the string to convert to a byte array.
-     * @return the bytes representing the specified string under JSecurity's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
+     * @return the bytes representing the specified string under Apache Ki's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
      */
     public static byte[] toBytes(String source) {
         return toBytes(source, PREFERRED_ENCODING);
@@ -102,7 +102,7 @@
     }
 
     /**
-     * Converts the specified byte array to a string using JSecurity's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
+     * Converts the specified byte array to a string using Apache Ki's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
      *
      * @param bytes the byte array to turn into a String.
      * @return the specified byte array as an encoded String ({@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}).
@@ -129,7 +129,7 @@
     }
 
     /**
-     * Returns the specified byte array as a character array using JSecurity's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
+     * Returns the specified byte array as a character array using Apache Ki's {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.
      *
      * @param bytes the byte array to convert to a char array
      * @return the specified byte array encoded as a character array ({@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}).
diff --git a/core/src/org/apache/ki/codec/Hex.java b/core/src/org/apache/ki/codec/Hex.java
index b1e0cae..44ca22d 100644
--- a/core/src/org/apache/ki/codec/Hex.java
+++ b/core/src/org/apache/ki/codec/Hex.java
@@ -23,7 +23,7 @@
  *
  * <p>This class was borrowed from Apache Commons Codec SVN repository (rev. 560660 ) with modifications
  * to enable Hex conversion without a full dependency on Commons Codec.  We didn't want to reinvent the wheel of
- * great work they've done, but also didn't want to force every JSecurity user to depend on the commons-codec.jar</p>
+ * great work they've done, but also didn't want to force every Apache Ki user to depend on the commons-codec.jar</p>
  *
  * <p>As per the Apache 2.0 license, the original copyright notice and all author and copyright information have
  * remained in tact.</p>
diff --git a/core/src/org/apache/ki/codec/package-info.java b/core/src/org/apache/ki/codec/package-info.java
index da22a3a..751f915 100644
--- a/core/src/org/apache/ki/codec/package-info.java
+++ b/core/src/org/apache/ki/codec/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 /**
- * Components for encoding and decoding of data across multiple formats, especially useful in JSecurity's
+ * Components for encoding and decoding of data across multiple formats, especially useful in Apache Ki's
  * cryptography and web functionality.
  */
-package org.ki.codec;
\ No newline at end of file
+package org.ki.codec;
diff --git a/core/src/org/apache/ki/config/Configuration.java b/core/src/org/apache/ki/config/Configuration.java
index 08da83a..9187939 100644
--- a/core/src/org/apache/ki/config/Configuration.java
+++ b/core/src/org/apache/ki/config/Configuration.java
@@ -22,7 +22,7 @@
 
 
 /**
- * A <code>Configuration</code> is responsible for 'wiring' together all the JSecurity components for an
+ * A <code>Configuration</code> is responsible for 'wiring' together all the Apache Ki components for an
  * application, such as the {@link org.apache.ki.mgt.SecurityManager SecurityManager}, and any of its
  * dependencies.
  * <p/>
diff --git a/core/src/org/apache/ki/config/ConfigurationException.java b/core/src/org/apache/ki/config/ConfigurationException.java
index 926693f..1509d5b 100644
--- a/core/src/org/apache/ki/config/ConfigurationException.java
+++ b/core/src/org/apache/ki/config/ConfigurationException.java
@@ -21,7 +21,7 @@
 import org.apache.ki.KiException;
 
 /**
- * Root exception indicating there was a problem parsing or processing the JSecurity configuration.
+ * Root exception indicating there was a problem parsing or processing the Apache Ki configuration.
  *
  * @author Les Hazlewood
  * @since 0.9
diff --git a/core/src/org/apache/ki/config/IniConfiguration.java b/core/src/org/apache/ki/config/IniConfiguration.java
index 93ec6dd..9d5cb56 100644
--- a/core/src/org/apache/ki/config/IniConfiguration.java
+++ b/core/src/org/apache/ki/config/IniConfiguration.java
@@ -96,11 +96,11 @@
             } else {
                 if (ignoreResourceNotFound) {
                     if (log.isDebugEnabled()) {
-                        log.debug("JSecurity resource [" + configUrl + "] not found.  Ignoring since " +
+                        log.debug("Apache Ki resource [" + configUrl + "] not found.  Ignoring since " +
                                 "'ignoreResourceNotFound' is set to true.");
                     }
                 } else {
-                    throw new ConfigurationException("JSecurity resource [" + configUrl + "] specified as a 'configUrl' " +
+                    throw new ConfigurationException("Apache Ki resource [" + configUrl + "] specified as a 'configUrl' " +
                             "cannot be found.  If you want to fall back on default configuration specified " +
                             "via the 'config' parameter, then set 'ignoreResourceNotFound' to true.");
                 }
diff --git a/core/src/org/apache/ki/config/ReflectionBuilder.java b/core/src/org/apache/ki/config/ReflectionBuilder.java
index 3c21d43..7a5c1f5 100644
--- a/core/src/org/apache/ki/config/ReflectionBuilder.java
+++ b/core/src/org/apache/ki/config/ReflectionBuilder.java
@@ -34,7 +34,7 @@
 
 /**
  * Object builder that uses reflection and Apache Commons BeanUtils to build objects given a
- * map of "property values".  Typically these come from the JSecurity INI configuration and are used
+ * map of "property values".  Typically these come from the Apache Ki INI configuration and are used
  * to construct or modify the SecurityManager, its dependencies, and web-based security filters.
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/config/package-info.java b/core/src/org/apache/ki/config/package-info.java
index a1b03bc..4234cee 100644
--- a/core/src/org/apache/ki/config/package-info.java
+++ b/core/src/org/apache/ki/config/package-info.java
@@ -17,6 +17,6 @@
  * under the License.
  */
 /**
- * Components that support configuring JSecurity in any application.
+ * Components that support configuring Apache Ki in any application.
  */
-package org.ki.config;
\ No newline at end of file
+package org.ki.config;
diff --git a/core/src/org/apache/ki/crypto/BlowfishCipher.java b/core/src/org/apache/ki/crypto/BlowfishCipher.java
index b081fb0..6433c38 100644
--- a/core/src/org/apache/ki/crypto/BlowfishCipher.java
+++ b/core/src/org/apache/ki/crypto/BlowfishCipher.java
@@ -33,15 +33,15 @@
 
 
 /**
- * JSecurity's default symmetric block Cipher using the Blowfish algorithm.  As it is a symmetric Cipher, it uses the
+ * Apache Ki's default symmetric block Cipher using the Blowfish algorithm.  As it is a symmetric Cipher, it uses the
  * same <tt>Key</tt> to both encrypt and decrypt data.  If one is not provided via the {@link #setKey setKey} method,
  * a default one will be used, BUT NOTE:
  *
- * <p>Because JSecurity is an open-source project, if anyone knew that you were using JSecurity's default
+ * <p>Because Apache Ki is an open-source project, if anyone knew that you were using Apache Ki's default
  * <code>Key</code>, they could download/view the source, and with enough effort, reconstruct the <code>Key</code>
  * and decode encrypted data at will.
  *
- * <p>JSecurity only really uses Ciphers to encrypt user ids and session ids, so if that information is not critical
+ * <p>Apache Ki only really uses Ciphers to encrypt user ids and session ids, so if that information is not critical
  * to you and you think the default key still makes things 'sufficiently difficult', then you can ignore this issue.
  *
  * <p>However, if you do feel this constitutes sensitive information, it is recommended that you provide your own
@@ -70,7 +70,7 @@
     //The following KEY_BYTES String was created by running
     //System.out.println( Base64.encode( generateNewKey().getEncoded() ) ); and copying-n-pasting the output here.
     //You should run the same and set the resulting output as a property of this class instead of using
-    //JSecurity's default Key for proper security.
+    //Apache Ki's default Key for proper security.
     private static final byte[] KEY_BYTES = Base64.decode("jJ9Kg1BAevbvhSg3vBfwfQ==");
     private static final Key DEFAULT_CIPHER_KEY = new SecretKeySpec(KEY_BYTES, ALGORITHM);
 
diff --git a/core/src/org/apache/ki/crypto/Cipher.java b/core/src/org/apache/ki/crypto/Cipher.java
index 473817e..38d102a 100644
--- a/core/src/org/apache/ki/crypto/Cipher.java
+++ b/core/src/org/apache/ki/crypto/Cipher.java
@@ -40,9 +40,9 @@
  * data shared between two parties, the same Key must also be shared and may be compromised.
  *
  * <p>Note that a symmetric cipher is perfectly fine to use if you just want to encode data in a format no one else
- * can understand and you never give away the key.  JSecurity uses a symmetric cipher when using certain
+ * can understand and you never give away the key.  Apache Ki uses a symmetric cipher when using certain
  * HTTP Cookies for example - because it is often undesireable to have user's identity stored in a plain-text cookie,
- * that identity can be converted via a symmetric cipher.  Since the the same exact JSecurity application will receive
+ * that identity can be converted via a symmetric cipher.  Since the the same exact Apache Ki application will receive
  * the cookie, it can decrypt it via the same <tt>Key</tt> and there is no potential for discovery since that Key
  * is never shared with anyone.
  *
diff --git a/core/src/org/apache/ki/crypto/hash/AbstractHash.java b/core/src/org/apache/ki/crypto/hash/AbstractHash.java
index a8f72bf..f11db10 100644
--- a/core/src/org/apache/ki/crypto/hash/AbstractHash.java
+++ b/core/src/org/apache/ki/crypto/hash/AbstractHash.java
@@ -28,7 +28,7 @@
 import org.apache.ki.codec.Hex;
 
 /**
- * Provides a base for all JSecurity Hash algorithms with support for salts and multiple hash iterations.
+ * Provides a base for all Apache Ki Hash algorithms with support for salts and multiple hash iterations.
  *
  * <p>Read <a href="http://www.owasp.org/index.php/Hashing_Java" target="blank">http://www.owasp.org/index.php/Hashing_Java</a> for a
  * good article on the benefits of hashing, including what a 'salt' is as well as why it and multiple hash iterations
diff --git a/core/src/org/apache/ki/crypto/package-info.java b/core/src/org/apache/ki/crypto/package-info.java
index b4cf084..008b839 100644
--- a/core/src/org/apache/ki/crypto/package-info.java
+++ b/core/src/org/apache/ki/crypto/package-info.java
@@ -21,6 +21,6 @@
  * add additional convenient behavior.
  * <p/>
  * The most important interface in this package is the {@link org.apache.ki.crypto.Cipher Cipher} interface, which
- * allows other JSecurity components to encrypt and decrypt potentially sensitive data.
+ * allows other Apache Ki components to encrypt and decrypt potentially sensitive data.
  */
-package org.ki.crypto;
\ No newline at end of file
+package org.ki.crypto;
diff --git a/core/src/org/apache/ki/io/Serializer.java b/core/src/org/apache/ki/io/Serializer.java
index 91b4a7b..3c8f64c 100644
--- a/core/src/org/apache/ki/io/Serializer.java
+++ b/core/src/org/apache/ki/io/Serializer.java
@@ -23,7 +23,7 @@
  * of objects to files, HTTP cookies, or other mechanism.
  * <p/>
  * A <code>Serializer</code> should only do conversion, never change the data, such as encoding/decoding or
- * encryption.  These orthoganal concerns are handled elsewhere by JSecurity, for example, via
+ * encryption.  These orthoganal concerns are handled elsewhere by Apache Ki, for example, via
  * {@link org.apache.ki.codec.CodecSupport CodecSupport} and {@link org.apache.ki.crypto.Cipher Cipher}s.
  * @author Les Hazlewood
  * @since 0.9
diff --git a/core/src/org/apache/ki/jndi/JndiCallback.java b/core/src/org/apache/ki/jndi/JndiCallback.java
index 5289ef5..a87b51c 100644
--- a/core/src/org/apache/ki/jndi/JndiCallback.java
+++ b/core/src/org/apache/ki/jndi/JndiCallback.java
@@ -34,7 +34,7 @@
  * <p>Note that this interface is an exact copy of the Spring Framework's identically named interface from
  * their 2.5.4 distribution - we didn't want to re-invent the wheel, but not require a full dependency on the
  * Spring framework, nor does Spring make available only its JNDI classes in a small jar, or we would have used that.
- * Since JSecurity is also Apache 2.0 licensed, all regular licenses and conditions and authors have remained in tact.
+ * Since Apache Ki is also Apache 2.0 licensed, all regular licenses and conditions and authors have remained in tact.
  *
  * @author Rod Johnson
  * @see JndiTemplate
diff --git a/core/src/org/apache/ki/jndi/JndiLocator.java b/core/src/org/apache/ki/jndi/JndiLocator.java
index b7766dd..0faa06b 100644
--- a/core/src/org/apache/ki/jndi/JndiLocator.java
+++ b/core/src/org/apache/ki/jndi/JndiLocator.java
@@ -31,7 +31,7 @@
  * <p>Note that this implementation is an almost exact combined copy of the Spring Framework's 'JndiAccessor' and
  * 'JndiLocatorSupport' classes from their 2.5.4 distribution - we didn't want to re-invent the wheel, but not require
  * a full dependency on the Spring framework, nor does Spring make available only its JNDI classes in a small jar, or
- * we would have used that. Since JSecurity is also Apache 2.0 licensed, all regular licenses and conditions and
+ * we would have used that. Since Apache Ki is also Apache 2.0 licensed, all regular licenses and conditions and
  * authors have remained in tact.
  *
  * @author Juergen Hoeller
diff --git a/core/src/org/apache/ki/jndi/JndiTemplate.java b/core/src/org/apache/ki/jndi/JndiTemplate.java
index bd6882a..f7e9946 100644
--- a/core/src/org/apache/ki/jndi/JndiTemplate.java
+++ b/core/src/org/apache/ki/jndi/JndiTemplate.java
@@ -37,7 +37,7 @@
  * <p>Note that this implementation is an almost exact copy of the Spring Framework's identically named class from
  * their 2.5.4 distribution - we didn't want to re-invent the wheel, but not require a full dependency on the
  * Spring framework, nor does Spring make available only its JNDI classes in a small jar, or we would have used that.
- * Since JSecurity is also Apache 2.0 licensed, all regular licenses and conditions and authors have remained in tact.
+ * Since Apache Ki is also Apache 2.0 licensed, all regular licenses and conditions and authors have remained in tact.
  *
  * @author Rod Johnson
  * @author Juergen Hoeller
diff --git a/core/src/org/apache/ki/jndi/package-info.java b/core/src/org/apache/ki/jndi/package-info.java
index 4df09a6..2c0cf86 100644
--- a/core/src/org/apache/ki/jndi/package-info.java
+++ b/core/src/org/apache/ki/jndi/package-info.java
@@ -17,6 +17,6 @@
  * under the License.
  */
 /**
- * Enables accessing objects located in JNDI that might be useful when configuring a JSecurity-enabled application.
+ * Enables accessing objects located in JNDI that might be useful when configuring a Apache Ki-enabled application.
  */
-package org.ki.jndi;
\ No newline at end of file
+package org.ki.jndi;
diff --git a/core/src/org/apache/ki/mgt/AuthenticatingSecurityManager.java b/core/src/org/apache/ki/mgt/AuthenticatingSecurityManager.java
index a9ab7fb..7c1df03 100644
--- a/core/src/org/apache/ki/mgt/AuthenticatingSecurityManager.java
+++ b/core/src/org/apache/ki/mgt/AuthenticatingSecurityManager.java
@@ -32,7 +32,7 @@
 
 
 /**
- * JSecurity support of a {@link SecurityManager} class hierarchy that delegates all
+ * Apache Ki support of a {@link SecurityManager} class hierarchy that delegates all
  * authentication operations to a wrapped {@link Authenticator Authenticator} instance.  That is, this class
  * implements all the <tt>Authenticator</tt> methods in the {@link SecurityManager SecurityManager}
  * interface, but in reality, those methods are merely passthrough calls to the underlying 'real'
@@ -40,7 +40,7 @@
  *
  * <p>All other <tt>SecurityManager</tt> (authorization, session, etc) methods are left to be implemented by subclasses.
  *
- * <p>In keeping with the other classes in this hierarchy and JSecurity's desire to minimize configuration whenever
+ * <p>In keeping with the other classes in this hierarchy and Apache Ki's desire to minimize configuration whenever
  * possible, suitable default instances for all dependencies are created upon instantiation.
  *
  * @author Les Hazlewood
@@ -125,7 +125,7 @@
      * interface in order for these listeners to be applied.  If it does not implement this interface, it is
      * considered a configuration error and an exception will be thrown.
      *
-     * <p>All of JSecurity's <tt>Authenticator</tt> implementations implement the
+     * <p>All of Apache Ki's <tt>Authenticator</tt> implementations implement the
      * <tt>AuthenticationListenerRegistrar</tt> interface, so you would only need
      * to worry about an exception being thrown if you provided your own Authenticator instance and did not
      * implement it.
diff --git a/core/src/org/apache/ki/mgt/AuthorizingSecurityManager.java b/core/src/org/apache/ki/mgt/AuthorizingSecurityManager.java
index ec46223..dc116d4 100644
--- a/core/src/org/apache/ki/mgt/AuthorizingSecurityManager.java
+++ b/core/src/org/apache/ki/mgt/AuthorizingSecurityManager.java
@@ -32,7 +32,7 @@
 
 
 /**
- * JSecurity support of a {@link SecurityManager} class hierarchy that delegates all
+ * Apache Ki support of a {@link SecurityManager} class hierarchy that delegates all
  * authorization (access control) operations to a wrapped {@link Authorizer Authorizer} instance.  That is,
  * this class implements all the <tt>Authorizer</tt> methods in the {@link SecurityManager SecurityManager}
  * interface, but in reality, those methods are merely passthrough calls to the underlying 'real'
@@ -41,7 +41,7 @@
  * <p>All remaining <tt>SecurityManager</tt> methods not covered by this class or its parents (mostly Session support)
  * are left to be implemented by subclasses.
  *
- * <p>In keeping with the other classes in this hierarchy and JSecurity's desire to minimize configuration whenever
+ * <p>In keeping with the other classes in this hierarchy and Apache Ki's desire to minimize configuration whenever
  * possible, suitable default instances for all dependencies will be created upon instantiation.
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/mgt/DefaultSecurityManager.java b/core/src/org/apache/ki/mgt/DefaultSecurityManager.java
index 83d707c..4259c0f 100644
--- a/core/src/org/apache/ki/mgt/DefaultSecurityManager.java
+++ b/core/src/org/apache/ki/mgt/DefaultSecurityManager.java
@@ -43,7 +43,7 @@
 
 
 /**
- * <p>The JSecurity framework's default concrete implementation of the {@link SecurityManager} interface,
+ * <p>The Apache Ki framework's default concrete implementation of the {@link SecurityManager} interface,
  * based around a collection of {@link org.apache.ki.realm.Realm}s.  This implementation delegates its
  * authentication, authorization, and session operations to wrapped {@link Authenticator}, {@link Authorizer}, and
  * {@link org.apache.ki.session.mgt.SessionManager SessionManager} instances respectively via superclass
@@ -482,7 +482,7 @@
      *          if the executor of this method is not allowed to acquire the owning {@code Subject}.  The reason
      *          for the exception is implementation-specific and could be for any number of reasons.  A common
      *          reason in many systems would be if one host tried to acquire a {@code Subject} based on a
-     *          {@code Session} that originated on an entirely different host (although it is not a JSecurity
+     *          {@code Session} that originated on an entirely different host (although it is not a Apache Ki
      *          requirement this scenario is disallowed - its just an example that <em>may</em> throw an Exception in
      *          some systems).
      * @see org.apache.ki.authz.HostUnauthorizedException
@@ -502,4 +502,4 @@
 
         return getSubjectFactory().createSubject(principals, existing, authenticated, host);
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/mgt/RealmSecurityManager.java b/core/src/org/apache/ki/mgt/RealmSecurityManager.java
index d9ea531..b71f4ac 100644
--- a/core/src/org/apache/ki/mgt/RealmSecurityManager.java
+++ b/core/src/org/apache/ki/mgt/RealmSecurityManager.java
@@ -28,7 +28,7 @@
 
 
 /**
- * JSecurity support of a {@link SecurityManager} class hierarchy based around a collection of
+ * Apache Ki support of a {@link SecurityManager} class hierarchy based around a collection of
  * {@link org.apache.ki.realm.Realm}s.  All actual {@code SecurityManager} method implementations are left to
  * subclasses.
  *
diff --git a/core/src/org/apache/ki/mgt/SecurityManager.java b/core/src/org/apache/ki/mgt/SecurityManager.java
index 10ab3f1..c54922c 100644
--- a/core/src/org/apache/ki/mgt/SecurityManager.java
+++ b/core/src/org/apache/ki/mgt/SecurityManager.java
@@ -33,7 +33,7 @@
  *
  * <p>The interface itself primarily exists as a convenience - it extends the {@link org.apache.ki.authc.Authenticator},
  * {@link Authorizer}, and {@link SessionManager} interfaces, thereby consolidating
- * these behaviors into a single point of reference.  For most JSecurity usages, this simplifies configuration and
+ * these behaviors into a single point of reference.  For most Apache Ki usages, this simplifies configuration and
  * tends to be a more convenient approach than referencing <code>Authenticator</code>, <code>Authorizer</code>, and
  * <code>SessionManager</code> instances seperately;  instead one only needs to interact with a
  * single <tt>SecurityManager</tt> instance.</p>
@@ -50,7 +50,7 @@
  *
  * <p>In that case, the application programmer can call the
  * {@link #getSubject() getSubject()} method and then use that returned instance for continued interaction with
- * JSecurity.  If your application code does not have a direct handle to the application's
+ * Apache Ki.  If your application code does not have a direct handle to the application's
  * <code>SecurityManager</code>, you can use {@link org.apache.ki.SecurityUtils SecurityUtils} anywhere in your code
  * to achieve the same result.
  *
@@ -102,4 +102,4 @@
      * @since 0.9
      */
     Subject getSubject();
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/mgt/SecurityManagerAware.java b/core/src/org/apache/ki/mgt/SecurityManagerAware.java
index 7120d99..4286494 100644
--- a/core/src/org/apache/ki/mgt/SecurityManagerAware.java
+++ b/core/src/org/apache/ki/mgt/SecurityManagerAware.java
@@ -21,7 +21,7 @@
 /**
  * Interface providing a callback method that allows an implementation of this interface to receive a reference to
  * the {@link org.apache.ki.mgt.SecurityManager SecurityManager} if they require one.  This is mostly used by core implementation classes
- * for framework code and is rarely necessary for software developers enabling JSecurity in their applications.
+ * for framework code and is rarely necessary for software developers enabling Apache Ki in their applications.
  *
  * @author Les Hazlewood
  * @since 1.0
diff --git a/core/src/org/apache/ki/mgt/SessionSubjectBinder.java b/core/src/org/apache/ki/mgt/SessionSubjectBinder.java
index 6619ed9..d447de9 100644
--- a/core/src/org/apache/ki/mgt/SessionSubjectBinder.java
+++ b/core/src/org/apache/ki/mgt/SessionSubjectBinder.java
@@ -54,8 +54,8 @@
  * end of request/thread execution, and a new one is created on the next request/method invocation as per step #1.</li>
  * </ol>
  * <p/>
- * Indeed this is exactly how JSecurity's default behavior works in enterprise server and web-based environments.  It is
- * enabled in the <code>JSecurityFilter</code> for web-based environments as well as remote-method-invocation-based
+ * Indeed this is exactly how Apache Ki's default behavior works in enterprise server and web-based environments.  It is
+ * enabled in the <code>Apache KiFilter</code> for web-based environments as well as remote-method-invocation-based
  * components for non-web environments.
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/mgt/SessionsSecurityManager.java b/core/src/org/apache/ki/mgt/SessionsSecurityManager.java
index eaec53e..bdf1ee0 100644
--- a/core/src/org/apache/ki/mgt/SessionsSecurityManager.java
+++ b/core/src/org/apache/ki/mgt/SessionsSecurityManager.java
@@ -37,7 +37,7 @@
 
 
 /**
- * JSecurity support of a {@link SecurityManager} class hierarchy that delegates all
+ * Apache Ki support of a {@link SecurityManager} class hierarchy that delegates all
  * {@link org.apache.ki.session.Session session} operations to a wrapped {@link org.apache.ki.session.mgt.SessionManager SessionManager}
  * instance.  That is, this class implements the methods in the
  * {@link SessionManager SessionManager} interface, but in reality, those methods are merely passthrough calls to
@@ -46,7 +46,7 @@
  * The remaining {@code SecurityManager} methods not implemented by this class or its parents are left to be
  * implemented by subclasses.
  * <p/>
- * In keeping with the other classes in this hierarchy and JSecurity's desire to minimize configuration whenever
+ * In keeping with the other classes in this hierarchy and Apache Ki's desire to minimize configuration whenever
  * possible, suitable default instances for all dependencies will be created upon instantiation.
  *
  * @author Les Hazlewood
@@ -158,7 +158,7 @@
                     "This might occur for example if you're trying to set the validation interval or auto session " +
                     "creation in a servlet container-backed session environment ('http' session mode).  If that is " +
                     "the case however, that property is only useful when using 'ki' session mode and using " +
-                    "JSecurity enterprise sessions which do not rely on a servlet container.";
+                    "Apache Ki enterprise sessions which do not rely on a servlet container.";
             throw new IllegalStateException(msg);
         }
     }
diff --git a/core/src/org/apache/ki/mgt/package-info.java b/core/src/org/apache/ki/mgt/package-info.java
index c95779b..ac9c860 100644
--- a/core/src/org/apache/ki/mgt/package-info.java
+++ b/core/src/org/apache/ki/mgt/package-info.java
@@ -18,6 +18,6 @@
  */
 /**
  * Provides the master {@link org.apache.ki.mgt.SecurityManager SecurityManager} interface and a default implementation
- * hierarchy for managing all aspects of JSecurity's functionality in an application.
+ * hierarchy for managing all aspects of Apache Ki's functionality in an application.
  */
-package org.ki.mgt;
\ No newline at end of file
+package org.ki.mgt;
diff --git a/core/src/org/apache/ki/package-info.java b/core/src/org/apache/ki/package-info.java
index 77567c3..472ccc2 100644
--- a/core/src/org/apache/ki/package-info.java
+++ b/core/src/org/apache/ki/package-info.java
@@ -19,6 +19,6 @@
 /**
  * This package primarily exists as a root classpath distinction, but it does contain two core classes widely used
  * by applications, {@link org.apache.ki.SecurityUtils SecurityUtils} and
- * {@link org.apache.ki.KiException JSecurityException}.
+ * {@link org.apache.ki.KiException Apache KiException}.
  */
-package org.ki;
\ No newline at end of file
+package org.ki;
diff --git a/core/src/org/apache/ki/realm/AuthenticatingRealm.java b/core/src/org/apache/ki/realm/AuthenticatingRealm.java
index d428dce..4e7290d 100644
--- a/core/src/org/apache/ki/realm/AuthenticatingRealm.java
+++ b/core/src/org/apache/ki/realm/AuthenticatingRealm.java
@@ -206,7 +206,7 @@
      * authentication token.
      *
      * <p>For most datasources, this means just 'pulling' authentication data for an associated subject/user and nothing
-     * more and letting JSecurity do the rest.  But in some systems, this method could actually perform EIS specific
+     * more and letting Apache Ki do the rest.  But in some systems, this method could actually perform EIS specific
      * log-in logic in addition to just retrieving data - it is up to the Realm implementation.
      *
      * <p>A <tt>null</tt> return value means that no account could be associated with the specified token.
@@ -224,11 +224,11 @@
      * Default implementation that does nothing (no-op) and exists as a convenience mechanism in case subclasses
      * wish to override it to implement realm-specific logout logic for the given user account logging out.</p>
      * <p/>
-     * In a single-realm JSecurity configuration (most applications), the <code>principals</code> method
+     * In a single-realm Apache Ki configuration (most applications), the <code>principals</code> method
      * argument will be the same as that which is contained in the <code>AuthenticationInfo</code> object returned by the
      * {@link #doGetAuthenticationInfo} method (that is, {@link AuthenticationInfo#getPrincipals info.getPrincipals()}).
      * <p/>
-     * In a multi-realm JSecurity configuration, the given <code>principals</code> method
+     * In a multi-realm Apache Ki configuration, the given <code>principals</code> method
      * argument could contain principals returned by many realms.  Therefore the subclass implementation would need
      * to know how to extract the principal(s) relevant to only itself and ignore other realms' principals.  This is
      * usually done by calling {@link org.apache.ki.subject.PrincipalCollection#fromRealm(String) principals.fromRealm(name)},
diff --git a/core/src/org/apache/ki/realm/Realm.java b/core/src/org/apache/ki/realm/Realm.java
index d778c3d..fb744ef 100644
--- a/core/src/org/apache/ki/realm/Realm.java
+++ b/core/src/org/apache/ki/realm/Realm.java
@@ -43,13 +43,13 @@
  * return <tt>false</tt>.
  *
  * <p>Because every application is different, security data such as users and roles can be
- * represented in any number of ways.  JSecurity tries to maintain a non-intrusive development philosophy whenever
+ * represented in any number of ways.  Apache Ki tries to maintain a non-intrusive development philosophy whenever
  * possible - it does not require you to implement or extend any <tt>User</tt>, <tt>Group</tt> or <tt>Role</tt>
  * interfaces or classes.
  *
- * <p>Instead, JSecurity allows applications to implement this interface to access environment-specific datasources
- * and data model objects.  The implementation can then be plugged in to the application's JSecurity configuration.
- * This modular technique abstracts away any environment/modeling details and allows JSecurity to be deployed in
+ * <p>Instead, Apache Ki allows applications to implement this interface to access environment-specific datasources
+ * and data model objects.  The implementation can then be plugged in to the application's Apache Ki configuration.
+ * This modular technique abstracts away any environment/modeling details and allows Apache Ki to be deployed in
  * practically any application environment.
  *
  * <p>Most users will not implement the <tt>Realm</tt> interface directly, but will extend one of the subclasses,
@@ -94,7 +94,7 @@
      *
      * <p>This method effectively represents a login attempt for the corresponding user with the underlying EIS datasource.
      * Most implementations merely just need to lookup and return the account data only (as the method name implies)
-     * and let JSecurity do the rest, but implementations may of course perform eis specific login operations if so
+     * and let Apache Ki do the rest, but implementations may of course perform eis specific login operations if so
      * desired.
      *
      * @param token the application-specific representation of an account principal and credentials.
@@ -106,4 +106,4 @@
      */
     AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException;
 
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/realm/RealmFactory.java b/core/src/org/apache/ki/realm/RealmFactory.java
index 32480c0..fa3e0c8 100644
--- a/core/src/org/apache/ki/realm/RealmFactory.java
+++ b/core/src/org/apache/ki/realm/RealmFactory.java
@@ -21,10 +21,10 @@
 import java.util.Collection;
 
 /**
- * Enables JSecurity end-users to configure and initialize one or more {@link Realm Realm} instances
+ * Enables Apache Ki end-users to configure and initialize one or more {@link Realm Realm} instances
  * in any manner desired.
  * <p/>
- * This interface exists to support environments where end-users may not wish to use JSecurity's default
+ * This interface exists to support environments where end-users may not wish to use Apache Ki's default
  * text-based configuration to create and configure realms, and instead wish to retrieve a realm configured in a
  * proprietary manner.  An implementation of this interface can access that proprietary mechanism to retrieve the
  * already-created <tt>Realm</tt>s.
diff --git a/core/src/org/apache/ki/realm/jndi/package-info.java b/core/src/org/apache/ki/realm/jndi/package-info.java
index e145ab9..13cda89 100644
--- a/core/src/org/apache/ki/realm/jndi/package-info.java
+++ b/core/src/org/apache/ki/realm/jndi/package-info.java
@@ -17,5 +17,5 @@
  * under the License.
  */
 /**
- * Support for acquiring Realms from JNDI, particularly useful for configuring JSecurity in JEE or EJB environments. */
-package org.ki.realm.jndi;
\ No newline at end of file
+ * Support for acquiring Realms from JNDI, particularly useful for configuring Apache Ki in JEE or EJB environments. */
+package org.ki.realm.jndi;
diff --git a/core/src/org/apache/ki/realm/text/PropertiesRealm.java b/core/src/org/apache/ki/realm/text/PropertiesRealm.java
index e326cf6..c8a29a4 100644
--- a/core/src/org/apache/ki/realm/text/PropertiesRealm.java
+++ b/core/src/org/apache/ki/realm/text/PropertiesRealm.java
@@ -136,7 +136,7 @@
         } catch (Exception e) {
             if (log.isInfoEnabled()) {
                 log.info("Unable to find a ki-users.properties file at location [" + this.resourcePath + "].  " +
-                        "Defaulting to JSecurity's failsafe properties file (demo use only).");
+                        "Defaulting to Apache Ki's failsafe properties file (demo use only).");
             }
             this.resourcePath = FAILSAFE_RESOURCE_PATH;
             loadProperties();
@@ -365,4 +365,4 @@
     protected String getRolename(String key) {
         return getName(key, ROLENAME_PREFIX);
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/org/apache/ki/realm/text/default-ki-users.properties b/core/src/org/apache/ki/realm/text/default-ki-users.properties
index a342343..3428334 100644
--- a/core/src/org/apache/ki/realm/text/default-ki-users.properties
+++ b/core/src/org/apache/ki/realm/text/default-ki-users.properties
@@ -25,7 +25,7 @@
 # which is probably of little value to a 'real' application.
 #
 # This file primarily exists as a failsafe mechanism in case you don't provide
-# any Realms to the JSecurity SecurityManager at startup.  It also serves as a
+# any Realms to the Apache Ki SecurityManager at startup.  It also serves as a
 # simple and fun example.  But you will want to provide one or more of your
 # own Realms in a real application.
 #
@@ -59,4 +59,4 @@
 # The 'schwartz' role can do anything (*) with any lightsaber:
 role.schwartz = lightsaber:*
 # The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with license plate 'eagle5' (instance specific id)
-role.goodguy = winnebago:drive:eagle5
\ No newline at end of file
+role.goodguy = winnebago:drive:eagle5
diff --git a/core/src/org/apache/ki/session/mgt/ValidatingSessionManager.java b/core/src/org/apache/ki/session/mgt/ValidatingSessionManager.java
index f55e3b8..12b172f 100644
--- a/core/src/org/apache/ki/session/mgt/ValidatingSessionManager.java
+++ b/core/src/org/apache/ki/session/mgt/ValidatingSessionManager.java
@@ -67,8 +67,8 @@
      * proactive systems, this {@link #validateSessions()} method should be invoked regularaly
      * anyway to <em>guarantee</em> no orphans exist.
      *
-     * <p><b>Note:</b> JSecurity supports automatic execution of this method at a regular interval
-     * by using {@link SessionValidationScheduler}s.  The JSecurity default SecurityManager implementations
+     * <p><b>Note:</b> Apache Ki supports automatic execution of this method at a regular interval
+     * by using {@link SessionValidationScheduler}s.  The Apache Ki default SecurityManager implementations
      * needing session validation will create and use one by default if one is not provided by the
      * application configuration.
      */
diff --git a/core/src/org/apache/ki/session/mgt/eis/MemorySessionDAO.java b/core/src/org/apache/ki/session/mgt/eis/MemorySessionDAO.java
index a0c510d..1bbbf4a 100644
--- a/core/src/org/apache/ki/session/mgt/eis/MemorySessionDAO.java
+++ b/core/src/org/apache/ki/session/mgt/eis/MemorySessionDAO.java
@@ -48,7 +48,7 @@
  * <li>If you need session information beyond their transient start/stop lifetimes, you should subclass this one and
  * override the <tt>do*</tt> methods to perform CRUD operations using an EIS-tier API (e.g. Hibernate/JPA/JCR/etc).
  * This class implementation does not retain sessions after they have been stopped or expired, so you would need to
- * override these methods to ensure Sessions can be accessed beyond JSecurity's needs.</li>
+ * override these methods to ensure Sessions can be accessed beyond Apache Ki's needs.</li>
  * </ul>
  *
  * @author Les Hazlewood
diff --git a/core/src/org/apache/ki/session/package-info.java b/core/src/org/apache/ki/session/package-info.java
index c7c46ba..e374e21 100644
--- a/core/src/org/apache/ki/session/package-info.java
+++ b/core/src/org/apache/ki/session/package-info.java
@@ -20,17 +20,17 @@
  * Components related to managing sessions, the time-based data contexts in which a Subject
  * interacts with an application.
  * <p/>
- * Sessions in JSecurity are completely POJO-based and do not <em>require</em> an application to use Web-based
+ * Sessions in Apache Ki are completely POJO-based and do not <em>require</em> an application to use Web-based
  * or EJB-based session management infrastructure - the client and/or server technoloy is irrelevent in
- * JSecurity's architecture, allowing session management to be employed in the smallest standalone application
+ * Apache Ki's architecture, allowing session management to be employed in the smallest standalone application
  * to the largest enterprise deployments.
  * <p/>
  * This design decision opens up a new world to Java applications - most notably the ability to participate in
  * a session regardless if the client is using HTTP, custom sockets, web services, or even non-Java progamming
- * languages. Aside from JSecurity, there is currently no technology in Java today allows this heterogenous 
+ * languages. Aside from Apache Ki, there is currently no technology in Java today allows this heterogenous 
  * client-session capability.
  * <p/>
- * Also because of this freedom, JSecurity naturally supports Single Sign-On for any application as well, using
+ * Also because of this freedom, Apache Ki naturally supports Single Sign-On for any application as well, using
  * this heterogeneous session support.
  */
-package org.ki.session;
\ No newline at end of file
+package org.ki.session;
diff --git a/core/src/org/apache/ki/subject/Subject.java b/core/src/org/apache/ki/subject/Subject.java
index 1c1eb5e..526fca5 100644
--- a/core/src/org/apache/ki/subject/Subject.java
+++ b/core/src/org/apache/ki/subject/Subject.java
@@ -30,13 +30,13 @@
 /**
  * A <tt>Subject</tt> represents state and security operations for a <em>single</em> application user.
  * These operations include authentication (login/logout), authorization (access control), and
- * session access. It is JSecurity's primary mechanism for single-user security functionality.
+ * session access. It is Apache Ki's primary mechanism for single-user security functionality.
  *
  * <p>Note that there are many *Permission methods in this interface overloaded to accept String arguments instead of
  * {@link Permission Permission} instances. They are a convenience allowing the caller to use a String representation of
  * a {@link Permission Permission} if desired.  The underlying Authorization subsystem implementations will usually
  * simply convert these String values to {@link Permission Permission} instances and then just call the corresponding
- * type-safe method.  (JSecurity's default implementations do String-to-Permission conversion for these methods using
+ * type-safe method.  (Apache Ki's default implementations do String-to-Permission conversion for these methods using
  * {@link org.apache.ki.authz.permission.PermissionResolver PermissionResolver}s.)
  *
  * <p>These overloaded *Permission methods <em>do</em> forego type-saftey for the benefit of convenience and simplicity,
@@ -55,15 +55,15 @@
      * <p>The term <em>principal</em> is just a fancy security term for any identifying attribute(s) of an application
      * user, such as a username, or user id, or public key, or anything else you might use in your application to
      * identify a user.  And although given names and family names (first/last) are technically principals as well,
-     * JSecurity expects the object(s) returned from this method to be uniquely identifying attibute(s) for
+     * Apache Ki expects the object(s) returned from this method to be uniquely identifying attibute(s) for
      * your application.  This implies that things like given names and family names are usually poor candidates as
      * return values since they are rarely guaranteed to be unique.</p>
      *
      * <p>Most single-Realm applications would return from this method a single unique principal as noted above
      * (for example a String username or Long user id, etc, etc).  Single-realm applications represent the large
-     * majority of JSecurity applications.</p>
+     * majority of Apache Ki applications.</p>
      *
-     * <p>However, in <em>multi</em>-Realm configurations, which are fully supported by JSecurity as well, it is
+     * <p>However, in <em>multi</em>-Realm configurations, which are fully supported by Apache Ki as well, it is
      * possible that the return value encapsulates more than one principal.  Typically multi-realm applications need to
      * retain the unique principals for <em>each</em> Realm so subsequent security checks against these Realms can
      * utilize these multiple principals.  In these cases, the object returned could be a Collection or any
diff --git a/core/src/org/apache/ki/subject/package-info.java b/core/src/org/apache/ki/subject/package-info.java
index 2d870d6..9292425 100644
--- a/core/src/org/apache/ki/subject/package-info.java
+++ b/core/src/org/apache/ki/subject/package-info.java
@@ -18,10 +18,10 @@
  */
 /**
  * Components supporting the {@link org.apache.ki.subject.Subject Subject} interface, the most important concept in
- * JSecurity's API.
+ * Apache Ki's API.
  * <p/>
- * A <code>Subject</code> is <em>the</em> primary component when using JSecurity programatically for single-user
+ * A <code>Subject</code> is <em>the</em> primary component when using Apache Ki programatically for single-user
  * security operations, and it is the handle to any accessible user security data.  All single-user
  * authentication, authorization and session operations are performed via a <code>Subject</code> instance.
  */
-package org.ki.subject;
\ No newline at end of file
+package org.ki.subject;
diff --git a/core/src/org/apache/ki/util/AntPathMatcher.java b/core/src/org/apache/ki/util/AntPathMatcher.java
index 531168b..e886fa2 100644
--- a/core/src/org/apache/ki/util/AntPathMatcher.java
+++ b/core/src/org/apache/ki/util/AntPathMatcher.java
@@ -50,7 +50,7 @@
  *
  * <p><b>N.B.</b>: This class was borrowed (with much appreciation) from the
  * <a href="http://www.springframework.org">Spring Framework</a> with modifications.  We didn't want to reinvent the
- * wheel of great work they've done, but also didn't want to force every JSecurity user to depend on Spring</p>
+ * wheel of great work they've done, but also didn't want to force every Apache Ki user to depend on Spring</p>
  *
  * <p>As per the Apache 2.0 license, the original copyright notice and all author and copyright information have
  * remained in tact.</p>
diff --git a/core/src/org/apache/ki/util/CollectionUtils.java b/core/src/org/apache/ki/util/CollectionUtils.java
index e70bb3b..ca6804c 100644
--- a/core/src/org/apache/ki/util/CollectionUtils.java
+++ b/core/src/org/apache/ki/util/CollectionUtils.java
@@ -38,7 +38,7 @@
 
     /**
      * Simple method that just returns <code>Collections.EMPTY_SET</code>.
-     * This exists to enable type-safe empty collections so other locations in JSecurity code
+     * This exists to enable type-safe empty collections so other locations in Apache Ki code
      * do not need to worry about suppressing warnings.
      *
      * @param clazz the class of the collection type to return
diff --git a/core/src/org/apache/ki/util/Destroyable.java b/core/src/org/apache/ki/util/Destroyable.java
index 5d1dd61..fffd4bb 100644
--- a/core/src/org/apache/ki/util/Destroyable.java
+++ b/core/src/org/apache/ki/util/Destroyable.java
@@ -19,7 +19,7 @@
 package org.apache.ki.util;
 
 /**
- * JSecurity container-agnostic interface that indicates that this object requires a callback during destruction.
+ * Apache Ki container-agnostic interface that indicates that this object requires a callback during destruction.
  *
  * @author Les Hazlewood
  * @author Jeremy Haile
diff --git a/core/src/org/apache/ki/util/Initializable.java b/core/src/org/apache/ki/util/Initializable.java
index 810c860..8005c61 100644
--- a/core/src/org/apache/ki/util/Initializable.java
+++ b/core/src/org/apache/ki/util/Initializable.java
@@ -21,7 +21,7 @@
 import org.apache.ki.KiException;
 
 /**
- * JSecurity container-agnostic interface that indicates that this object requires initialization.
+ * Apache Ki container-agnostic interface that indicates that this object requires initialization.
  *
  * @author Les Hazlewood
  * @author Jeremy Haile
diff --git a/core/src/org/apache/ki/util/JavaEnvironment.java b/core/src/org/apache/ki/util/JavaEnvironment.java
index 7cc68f7..595ebfb 100644
--- a/core/src/org/apache/ki/util/JavaEnvironment.java
+++ b/core/src/org/apache/ki/util/JavaEnvironment.java
@@ -20,10 +20,10 @@
 
 /**
  * Internal helper class used to find the Java/JDK version
- * that JSecurity is operating within, to allow for automatically
+ * that Apache Ki is operating within, to allow for automatically
  * adapting to the present platform's capabilities.
  *
- * <p>Note that JSecurity does not support 1.2 or earlier JVMs - only 1.3 and later.
+ * <p>Note that Apache Ki does not support 1.2 or earlier JVMs - only 1.3 and later.
  *
  * <p><em>This class was borrowed and heavily based upon a nearly identical version found in
  * the <a href="http://www.springframework.org/">Spring Framework</a>, with minor modifications.
diff --git a/core/src/org/apache/ki/util/JdbcUtils.java b/core/src/org/apache/ki/util/JdbcUtils.java
index 36d5e74..2f8b081 100644
--- a/core/src/org/apache/ki/util/JdbcUtils.java
+++ b/core/src/org/apache/ki/util/JdbcUtils.java
@@ -30,7 +30,7 @@
  * A set of static helper methods for managing JDBC API objects.
  * <p/>
  * <em>Note:</em> Some parts of this class were copied from the Spring Framework and then modified.
- * They were copied here to prevent Spring dependencies in the JSecurity core API.  The original license conditions
+ * They were copied here to prevent Spring dependencies in the Apache Ki core API.  The original license conditions
  * (Apache 2.0) have been maintained.
  *
  * @author Jeremy Haile
diff --git a/core/src/org/apache/ki/util/UnknownClassException.java b/core/src/org/apache/ki/util/UnknownClassException.java
index 781a90f..8afde20 100644
--- a/core/src/org/apache/ki/util/UnknownClassException.java
+++ b/core/src/org/apache/ki/util/UnknownClassException.java
@@ -22,7 +22,7 @@
 
 
 /**
- * The JSecurity framework's <code>RuntimeException</code> equivalent of the JDK's
+ * The Apache Ki framework's <code>RuntimeException</code> equivalent of the JDK's
  * <code>ClassNotFoundException</code>, to maintain a RuntimeException paradigm.
  *
  * @author Les Hazlewood
diff --git a/docs/reference/src/index.xml b/docs/reference/src/index.xml
index d2e3fca..3f68139 100644
--- a/docs/reference/src/index.xml
+++ b/docs/reference/src/index.xml
@@ -36,7 +36,7 @@
                 ]>
 <book>
     <bookinfo>
-        <title>JSecurity Reference Documentation</title>
+        <title>Apache Ki Reference Documentation</title>
         <releaseinfo>1.0.0</releaseinfo>
         <authorgroup>
             <author>
@@ -58,13 +58,13 @@
     <toc/>
     &preface;
     <part id="jsecurity-quickstart">
-        <title>JSecurity Quickstart</title>
+        <title>Apache Ki Quickstart</title>
         <partintro id="jsecurity-quickstart-intro">
             <para>
                 This initial part of the reference documentation walks through the simplest quickstart application
-                so that you may become familiarized JSecurity's programming API and general concepts. While this
-                application is probably the absolute simplest JSecurity-enabled application that we know of,
-                it should make you comfortable understanding what JSecurity can do, and how it can help you create
+                so that you may become familiarized Apache Ki's programming API and general concepts. While this
+                application is probably the absolute simplest Apache Ki-enabled application that we know of,
+                it should make you comfortable understanding what Apache Ki can do, and how it can help you create
                 more secure applications. The rest of the documentation will serve as your guide to help you move
                 from this simple example to even the most complicated enterprise applications.
             </para>
@@ -78,11 +78,11 @@
         </partintro>
     </part>
     <part id="jsecurity-core">
-        <title>JSecurity Core</title>
+        <title>Apache Ki Core</title>
         <partintro id="jsecurity-core-intro">
             <para>
                 This part of the reference documentation covers
-                JSecurity's core architectural components that support
+                Apache Ki's core architectural components that support
                 functionality in all environments, from
                 constrained Applets and cell phones to full n-tier
                 clustered enterprise applications.
@@ -148,7 +148,7 @@
      <partintro id="ki-web-intro">
        <para>
          This part of the reference documentation covers
-                 JSecurity's web support, specifically using JSecurity in
+                 Apache Ki's web support, specifically using Apache Ki in
                  a Servlet container for web-based applications.
        </para>
        <para>
@@ -188,7 +188,7 @@
      <title>Integration</title>
      <partintro id="ki-integration-intro">
        <para>
-         This part of the reference documentation covers JSecurity's
+         This part of the reference documentation covers Apache Ki's
                  integration with other technologies that might be
                  useful in application deployments.
        </para>
@@ -225,4 +225,4 @@
    </part> -->
     <!-- back matter -->
     &jsecurity.tld;
-</book>
\ No newline at end of file
+</book>
diff --git a/docs/reference/src/preface.xml b/docs/reference/src/preface.xml
index 4f7cdd0..d6437c4 100644
--- a/docs/reference/src/preface.xml
+++ b/docs/reference/src/preface.xml
@@ -41,7 +41,7 @@
     </para>
 
     <para>
-        JSecurity is a Java security framework that attempts to achieve these goals. The framework tries to
+        Apache Ki is a Java security framework that attempts to achieve these goals. The framework tries to
         give as much power and flexibility as possible, while still being
         <emphasis>really</emphasis>
         easy to understand and easy to use. It tries to be the most comprehensive and feature-rich security
@@ -49,8 +49,8 @@
     </para>
 
     <para>
-        This document is the official refrence manual for the JSecurity framework, and it aims to give you the
-        most complete documentation on JSecurity and all of its features. It is
+        This document is the official refrence manual for the Apache Ki framework, and it aims to give you the
+        most complete documentation on Apache Ki and all of its features. It is
         very much a work-in-progress, and we welcome suggestions and recommendations. If you have any,
         we'd very much appreciate your feedback on our forums at
         <ulink url="http://www.jsecurity.org/forum">http://www.jsecurity.org/forum</ulink>
@@ -75,8 +75,8 @@
 
     <para>
         So, without further adieu, let's move on to the documentation. Feel
-        free knowing you can incorporate JSecurity's rich features quickly and easily now, or perhaps maybe
+        free knowing you can incorporate Apache Ki's rich features quickly and easily now, or perhaps maybe
         later when you<quote>get around to it</quote>.
     </para>
 
-</preface>
\ No newline at end of file
+</preface>
diff --git a/docs/reference/src/security-manager.xml b/docs/reference/src/security-manager.xml
index 5b219ef..cdcc33e 100644
--- a/docs/reference/src/security-manager.xml
+++ b/docs/reference/src/security-manager.xml
@@ -23,8 +23,8 @@
   <section id="security-manager-introduction">
     <title>Introduction</title>
 
-    <para>This chapter covers JSecurity's notion of a Security Manager.</para>
+    <para>This chapter covers Apache Ki's notion of a Security Manager.</para>
 
   </section>
 
-</chapter>
\ No newline at end of file
+</chapter>
diff --git a/docs/reference/styles/fopdf.xsl b/docs/reference/styles/fopdf.xsl
index b958c1c..e62d20b 100644
--- a/docs/reference/styles/fopdf.xsl
+++ b/docs/reference/styles/fopdf.xsl
@@ -20,7 +20,7 @@
   -->
 
 <!--
-    This is the XSL FO (PDF) stylesheet for the JSecurity reference
+    This is the XSL FO (PDF) stylesheet for the Apache Ki reference
     documentation.
 
     Thanks are due to Christian Bauer of the Hibernate project team
@@ -130,7 +130,7 @@
     <xsl:param name="gentext-key" select="''"/>
     <xsl:variable name="Version">
       <xsl:if test="//releaseinfo">
-        <xsl:text>JSecurity (</xsl:text>
+        <xsl:text>Apache Ki (</xsl:text>
         <xsl:value-of select="//releaseinfo"/>
         <xsl:text>)</xsl:text>
       </xsl:if>
@@ -518,4 +518,4 @@
     </fo:basic-link>
   </xsl:template>
 
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/docs/reference/styles/html.xsl b/docs/reference/styles/html.xsl
index 911f81d..f9440e3 100644
--- a/docs/reference/styles/html.xsl
+++ b/docs/reference/styles/html.xsl
@@ -19,7 +19,7 @@
   -->
 
 <!--
-    This is the XSL HTML configuration file for the JSecurity
+    This is the XSL HTML configuration file for the Apache Ki
     Reference Documentation.
 -->
 <!DOCTYPE xsl:stylesheet [
@@ -116,4 +116,4 @@
     </div>
   </xsl:template>
 
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/docs/reference/styles/html_chunk.xsl b/docs/reference/styles/html_chunk.xsl
index 9d59394..4e30d66 100644
--- a/docs/reference/styles/html_chunk.xsl
+++ b/docs/reference/styles/html_chunk.xsl
@@ -19,7 +19,7 @@
   -->
 
 <!--
-    This is the XSL HTML configuration file for the JSecurity Reference Documentation.
+    This is the XSL HTML configuration file for the Apache Ki Reference Documentation.
 -->
 <!DOCTYPE xsl:stylesheet [
   <!ENTITY db_xsl_path        "../../../lib/docbook/docbook-xsl/">
@@ -104,10 +104,10 @@
   <!--###################################################
                   Headers and Footers
  ################################################### -->
-  <!-- let's have a JSecurity and Anjin banner across the top of each page -->
+  <!-- let's have a Apache Ki and Anjin banner across the top of each page -->
   <xsl:template name="user.header.navigation">
     <div style="background-color:white;border:none;height:73px;border:1px solid black;">
-      <a style="border:none;" href="http://www.jsecurity.org/" title="JSecurity">
+      <a style="border:none;" href="http://www.jsecurity.org/" title="Apache Ki">
         <img style="border:none;" src="images/xdev-jsecurity_logo.jpg"/>
       </a>
       <!--  <a style="border:none;" href="http://www.anjinllc.com/" title="AnjinLLC">
@@ -236,4 +236,4 @@
       </div>
     </xsl:if>
   </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/docs/reference/styles/tld.to.docbook.xsl b/docs/reference/styles/tld.to.docbook.xsl
index 4c1dbf0..63e88a1 100644
--- a/docs/reference/styles/tld.to.docbook.xsl
+++ b/docs/reference/styles/tld.to.docbook.xsl
@@ -55,9 +55,9 @@
       </xsl:element>
 
       <xsl:element name="para">
-        <xsl:text>One of the view technologies you can use with JSecurity
+        <xsl:text>One of the view technologies you can use with Apache Ki
           is Java Server Pages (JSPs). To help you implement views using Java Server Pages,
-          JSecurity provides you with some tags for evaluating errors, setting
+          Apache Ki provides you with some tags for evaluating errors, setting
           themes and outputting internationalized messages.
         </xsl:text>
       </xsl:element>
@@ -253,4 +253,4 @@
     <xsl:value-of select="$id"/>
   </xsl:template>
 
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/ivy.xml b/ivy.xml
index 2e24c49..808be63 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -25,7 +25,7 @@
         <license name="Apache License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.html"/>
         <ivyauthor name="Les Hazlewood" url="http://www.leshazlewood.com"/>
         <description homepage="http://www.jsecurity.org">
-            JSecurity is a powerful and flexible open-source Java security framework that cleanly handles
+            Apache Ki is a powerful and flexible open-source Java security framework that cleanly handles
             authentication, authorization, enterprise session management, single sign-on and cryptography services.
 
             Our mission: To provide the most robust and comprehensive Java security framework available while
@@ -93,4 +93,4 @@
 
     </dependencies>
 
-</ivy-module>
\ No newline at end of file
+</ivy-module>
diff --git a/samples/quickstart/src/Quickstart.java b/samples/quickstart/src/Quickstart.java
index 9872cc5..7a29989 100644
--- a/samples/quickstart/src/Quickstart.java
+++ b/samples/quickstart/src/Quickstart.java
@@ -43,8 +43,8 @@
     public static void main( String[] args ) {
 
         //Most applications would never instantiate a SecurityManager directly - you would instead configure
-        //JSecurity in web.xml or a container (JEE, Spring, etc).
-        //But, since this is a quickstart, we just want you to get a feel for how the JSecurity API looks, so this
+        //Apache Ki in web.xml or a container (JEE, Spring, etc).
+        //But, since this is a quickstart, we just want you to get a feel for how the Apache Ki API looks, so this
         //is sufficient to have a simple working example:
         DefaultSecurityManager securityManager = new DefaultSecurityManager();
 
@@ -55,7 +55,7 @@
         SecurityUtils.setSecurityManager( securityManager );
 
 
-        //now that a simple JSecurity environment is set up, let's see what you can do:
+        //now that a simple Apache Ki environment is set up, let's see what you can do:
 
         //get the currently executing user:
         Subject currentUser = SecurityUtils.getSubject();
diff --git a/samples/quickstart/src/log4j.properties b/samples/quickstart/src/log4j.properties
index b4da3cd..c84c628 100644
--- a/samples/quickstart/src/log4j.properties
+++ b/samples/quickstart/src/log4j.properties
@@ -28,9 +28,9 @@
 # Spring
 log4j.logger.org.springframework=WARN
 
-# Default JSecurity logging
+# Default Apache Ki logging
 log4j.logger.org.ki=TRACE
 
 # Disable verbose logging
 log4j.logger.org.apache.ki.util.ThreadContext=WARN
-log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
\ No newline at end of file
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
diff --git a/samples/spring-hibernate/src/org/jsecurity/samples/sprhib/security/SampleRealm.java b/samples/spring-hibernate/src/org/jsecurity/samples/sprhib/security/SampleRealm.java
index 397a09d..67235cd 100644
--- a/samples/spring-hibernate/src/org/jsecurity/samples/sprhib/security/SampleRealm.java
+++ b/samples/spring-hibernate/src/org/jsecurity/samples/sprhib/security/SampleRealm.java
@@ -31,7 +31,7 @@
 import org.springframework.stereotype.Component;
 
 /**
- * The Spring/Hibernate sample application's one and only configured JSecurity Realm.
+ * The Spring/Hibernate sample application's one and only configured Apache Ki Realm.
  *
  * <p>Because a Realm is really just a security-specific DAO, we could have just made Hibernate calls directly
  * in the implementation and named it a 'HibernateRealm' or something similar.</p>
diff --git a/samples/spring-hibernate/web/WEB-INF/applicationContext.xml b/samples/spring-hibernate/web/WEB-INF/applicationContext.xml
index 6b90617..5380a3a 100644
--- a/samples/spring-hibernate/web/WEB-INF/applicationContext.xml
+++ b/samples/spring-hibernate/web/WEB-INF/applicationContext.xml
@@ -36,7 +36,7 @@
     <context:component-scan base-package="org.ki.samples.sprhib.security"/>
     <context:component-scan base-package="org.ki.samples.sprhib.service"/>
 
-    <!-- Spring AOP auto-proxy creation (required to support JSecurity annotations) -->
+    <!-- Spring AOP auto-proxy creation (required to support Apache Ki annotations) -->
     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
 
 
@@ -82,10 +82,10 @@
 
 
     <!-- =========================================================
-         JSecurity Components
+         Apache Ki Components
          ========================================================= -->
 
-    <!-- JSecurity's main business-tier object for web-enabled applications
+    <!-- Apache Ki's main business-tier object for web-enabled applications
          (use org.kifaultSecurityManager instead when there is no web environment)-->
     <bean id="securityManager" class="org.apache.ki.web.DefaultWebSecurityManager">
         <!-- Single realm app (realm configured next, below).  If you have multiple realms, use the 'realms'
diff --git a/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties b/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties
index 6f0703b..3c947de 100644
--- a/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties
+++ b/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties
@@ -31,7 +31,7 @@
 # Hibernate
 log4j.logger.org.hibernate=WARN
 
-# Default JSecurity logging
+# Default Apache Ki logging
 log4j.logger.org.ki=TRACE
 
 # Disable verbose logging
diff --git a/samples/spring-hibernate/web/WEB-INF/jsp/editUser.jsp b/samples/spring-hibernate/web/WEB-INF/jsp/editUser.jsp
index c6f7f01..de8ac11 100644
--- a/samples/spring-hibernate/web/WEB-INF/jsp/editUser.jsp
+++ b/samples/spring-hibernate/web/WEB-INF/jsp/editUser.jsp
@@ -21,12 +21,12 @@
 
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/>
 </head>
 <body>
     <div id="box">
-        <div class="title">JSecurity Sample App - Edit User</div>
+        <div class="title">Apache Ki Sample App - Edit User</div>
 
         <div class="content">
             <form:form modelAttribute="editUserCommand">
@@ -49,4 +49,4 @@
     </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring-hibernate/web/WEB-INF/jsp/home.jsp b/samples/spring-hibernate/web/WEB-INF/jsp/home.jsp
index 06e99ac..03c1713 100644
--- a/samples/spring-hibernate/web/WEB-INF/jsp/home.jsp
+++ b/samples/spring-hibernate/web/WEB-INF/jsp/home.jsp
@@ -21,13 +21,13 @@
 
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/>
 </head>
 <body>
 
 <div id="bigbox">
-    <div class="title clearfix"><div style="float: left">JSecurity Sample App - Home</div><div class="info" >Logged in as ${currentUser.username} (<a href="<c:url value="/s/logout"/>">Logout</a>)</div></div>
+    <div class="title clearfix"><div style="float: left">Apache Ki Sample App - Home</div><div class="info" >Logged in as ${currentUser.username} (<a href="<c:url value="/s/logout"/>">Logout</a>)</div></div>
 
 
     <div class="content">
@@ -52,4 +52,4 @@
 </div>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring-hibernate/web/WEB-INF/jsp/login.jsp b/samples/spring-hibernate/web/WEB-INF/jsp/login.jsp
index 95c6766..0db8c4a 100644
--- a/samples/spring-hibernate/web/WEB-INF/jsp/login.jsp
+++ b/samples/spring-hibernate/web/WEB-INF/jsp/login.jsp
@@ -21,12 +21,12 @@
 
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/> 
 </head>
 <body>
     <div id="box">
-        <div class="title">JSecurity Sample App - Login</div>
+        <div class="title">Apache Ki Sample App - Login</div>
 
         <div class="content">
             <form:form modelAttribute="loginCommand">
@@ -53,4 +53,4 @@
     </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring-hibernate/web/WEB-INF/jsp/manageUsers.jsp b/samples/spring-hibernate/web/WEB-INF/jsp/manageUsers.jsp
index 99f0677..8e56ed4 100644
--- a/samples/spring-hibernate/web/WEB-INF/jsp/manageUsers.jsp
+++ b/samples/spring-hibernate/web/WEB-INF/jsp/manageUsers.jsp
@@ -21,13 +21,13 @@
 
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/>
 </head>
 <body>
 
 <div id="bigbox">
-    <div class="title clearfix"><div style="float: left">JSecurity Sample App - Manage Users</div><div class="info" >Logged in as ${currentUser.username} (<a href="<c:url value="/s/logout"/>">Logout</a>)</div></div>
+    <div class="title clearfix"><div style="float: left">Apache Ki Sample App - Manage Users</div><div class="info" >Logged in as ${currentUser.username} (<a href="<c:url value="/s/logout"/>">Logout</a>)</div></div>
 
 
     <div class="content">
@@ -54,4 +54,4 @@
 </div>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring-hibernate/web/WEB-INF/jsp/signup.jsp b/samples/spring-hibernate/web/WEB-INF/jsp/signup.jsp
index 565e435..c671047 100644
--- a/samples/spring-hibernate/web/WEB-INF/jsp/signup.jsp
+++ b/samples/spring-hibernate/web/WEB-INF/jsp/signup.jsp
@@ -21,12 +21,12 @@
 
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/>
 </head>
 <body>
     <div id="box">
-        <div class="title">JSecurity Sample App - Signup</div>
+        <div class="title">Apache Ki Sample App - Signup</div>
 
         <div class="content">
             <form:form modelAttribute="signupCommand">
@@ -46,4 +46,4 @@
     </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring-hibernate/web/WEB-INF/web.xml b/samples/spring-hibernate/web/WEB-INF/web.xml
index 5b82a7b..2448581 100644
--- a/samples/spring-hibernate/web/WEB-INF/web.xml
+++ b/samples/spring-hibernate/web/WEB-INF/web.xml
@@ -60,19 +60,19 @@
     </filter>
 
     <filter>
-        <filter-name>JSecurityFilter</filter-name>
-        <filter-class>org.apache.ki.spring.SpringJSecurityFilter</filter-class>
+        <filter-name>Apache KiFilter</filter-name>
+        <filter-class>org.apache.ki.spring.SpringApache KiFilter</filter-class>
         <init-param>
             <param-name>config</param-name>
             <param-value>
 
-                # The JSecurityFilter configuration is very powerful and flexible, while still remaining succinct.
+                # The Apache KiFilter configuration is very powerful and flexible, while still remaining succinct.
                 # Please read the comprehensive example, with full comments and explanations, in the JavaDoc:
                 #
-                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/JSecurityFilter.html
+                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/Apache KiFilter.html
 
                 # If you'd prefer to not have this configuration in web.xml, you can create a file called jsecurity.ini
-                # in the root of your classpath and JSecurity will automatically pick it up.
+                # in the root of your classpath and Apache Ki will automatically pick it up.
 
                 [filters]
                 # Override the authentication filter to pass thru so we can handle login logic in our controller
@@ -96,7 +96,7 @@
     </filter-mapping>
 
     <filter-mapping>
-        <filter-name>JSecurityFilter</filter-name>
+        <filter-name>Apache KiFilter</filter-name>
         <url-pattern>/s/*</url-pattern>
     </filter-mapping>
 
diff --git a/samples/spring-hibernate/web/unauthorized.jsp b/samples/spring-hibernate/web/unauthorized.jsp
index b46b28d..fc95097 100644
--- a/samples/spring-hibernate/web/unauthorized.jsp
+++ b/samples/spring-hibernate/web/unauthorized.jsp
@@ -19,11 +19,11 @@
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <html>
 <head>
-    <title>JSecurity Spring-Hibernate Sample Application</title>
+    <title>Apache Ki Spring-Hibernate Sample Application</title>
     <link rel="stylesheet" type="text/css" href="<c:url value="/styles/sample.css"/>"/>
 </head>
 <body>
 <h3>Unauthorized</h3>
 <p>You are not authorized to access the requested page.  Please return to the <a href="<c:url value="/s/home"/>">homepage</a>.</p>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring/build.xml b/samples/spring/build.xml
index 0ef781e..cd90889 100644
--- a/samples/spring/build.xml
+++ b/samples/spring/build.xml
@@ -52,7 +52,7 @@
         <delete dir="${build.dir}"/>
     </target>
 
-    <target name="grabLogo" description="Ensures the JSecurity logo is available to the jar task for inclusion in the jar">
+    <target name="grabLogo" description="Ensures the Apache Ki logo is available to the jar task for inclusion in the jar">
         <copy todir="${classes.dir}">
             <fileset dir="webroot">
                 <include name="logo.png"/>
diff --git a/samples/spring/etc/ehcache.xml b/samples/spring/etc/ehcache.xml
index 491d619..0c94f8d 100644
--- a/samples/spring/etc/ehcache.xml
+++ b/samples/spring/etc/ehcache.xml
@@ -17,7 +17,7 @@
   ~ under the License.
   -->
 
-<!-- EhCache XML configuration file used for JSecurity spring sample application -->
+<!-- EhCache XML configuration file used for Apache Ki spring sample application -->
 <ehcache>
 
   <!-- Sets the path to the directory where cache .data files are created.
@@ -74,10 +74,10 @@
     diskExpiryThreadIntervalSeconds="120"
     />
 
-  <!-- We want eternal="true" (with no timeToIdle or timeToLive settings) because JSecurity manages session
+  <!-- We want eternal="true" (with no timeToIdle or timeToLive settings) because Apache Ki manages session
 expirations explicitly.  If we set it to false and then set corresponding timeToIdle and timeToLive properties,
-ehcache would evict sessions without JSecurity's knowledge, which would cause many problems
-(e.g. "My JSecurity session timeout is 30 minutes - why isn't a session available after 2 minutes?"
+ehcache would evict sessions without Apache Ki's knowledge, which would cause many problems
+(e.g. "My Apache Ki session timeout is 30 minutes - why isn't a session available after 2 minutes?"
 Answer - ehcache expired it due to the timeToIdle property set to 120 seconds.)
 
 diskPersistent=true since we want an enterprise session management feature - ability to use sessions after
@@ -95,4 +95,4 @@
          timeToLiveSeconds="600"
          overflowToDisk="false"/>
 
-</ehcache>
\ No newline at end of file
+</ehcache>
diff --git a/samples/spring/etc/jsecurity-sample.jks b/samples/spring/etc/jsecurity-sample.jks
index eb2ff9b..cba1368 100644
--- a/samples/spring/etc/jsecurity-sample.jks
+++ b/samples/spring/etc/jsecurity-sample.jks
Binary files differ
diff --git a/samples/spring/etc/webstart.spring.xml b/samples/spring/etc/webstart.spring.xml
index 5a9e3f8..7d2a8cc 100644
--- a/samples/spring/etc/webstart.spring.xml
+++ b/samples/spring/etc/webstart.spring.xml
@@ -20,7 +20,7 @@
 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
 <!--
-  - Application context for JSecurity WebStart sample application
+  - Application context for Apache Ki WebStart sample application
   -->
 <beans>
 
diff --git a/samples/spring/src/org/ki/samples/spring/BootstrapDataPopulator.java b/samples/spring/src/org/ki/samples/spring/BootstrapDataPopulator.java
index 8da714e..d789274 100644
--- a/samples/spring/src/org/ki/samples/spring/BootstrapDataPopulator.java
+++ b/samples/spring/src/org/ki/samples/spring/BootstrapDataPopulator.java
@@ -28,7 +28,7 @@
 
 /**
  * A data populator that creates a set of security tables and test data that can be used by the
- * JSecurity Spring sample application to demonstrate the use of the {@link org.apache.ki.realm.jdbc.JdbcRealm}
+ * Apache Ki Spring sample application to demonstrate the use of the {@link org.apache.ki.realm.jdbc.JdbcRealm}
  * The tables created by this class follow the default table and column names that {@link org.apache.ki.realm.jdbc.JdbcRealm} uses.
  *
  * @author Les Hazlewood
diff --git a/samples/spring/src/org/ki/samples/spring/ui/WebStartView.java b/samples/spring/src/org/ki/samples/spring/ui/WebStartView.java
index 2667cf0..ed1b22e 100644
--- a/samples/spring/src/org/ki/samples/spring/ui/WebStartView.java
+++ b/samples/spring/src/org/ki/samples/spring/ui/WebStartView.java
@@ -34,7 +34,7 @@
 
 /**
  * Simple web start application that helps to demo single sign-on and
- * remoting authorization using JSecurity.  The injected <tt>SampleManager</tt>
+ * remoting authorization using Apache Ki.  The injected <tt>SampleManager</tt>
  * is hosted by the Spring sample web application and remotely invoked
  * when the buttons in this view are clicked.
  *
@@ -107,7 +107,7 @@
         methodPanel.add(secureMethod2Button);
         methodPanel.add(secureMethod3Button);
 
-        frame = new JFrame("JSecurity Sample Application");
+        frame = new JFrame("Apache Ki Sample Application");
         frame.setSize(500, 200);
 
         Container panel = frame.getContentPane();
diff --git a/samples/spring/src/org/ki/samples/spring/web/IndexController.java b/samples/spring/src/org/ki/samples/spring/web/IndexController.java
index 59620e8..95138ca 100644
--- a/samples/spring/src/org/ki/samples/spring/web/IndexController.java
+++ b/samples/spring/src/org/ki/samples/spring/web/IndexController.java
@@ -33,7 +33,7 @@
 import java.util.Map;
 
 /**
- * Spring MVC controller responsible for rendering the JSecurity Spring sample
+ * Spring MVC controller responsible for rendering the Apache Ki Spring sample
  * application index page.
  *
  * @author Jeremy Haile
@@ -94,4 +94,4 @@
         return showForm(request, response, errors);
     }
 
-}
\ No newline at end of file
+}
diff --git a/samples/spring/src/org/ki/samples/spring/web/JnlpController.java b/samples/spring/src/org/ki/samples/spring/web/JnlpController.java
index e887e6e..b4f12a6 100644
--- a/samples/spring/src/org/ki/samples/spring/web/JnlpController.java
+++ b/samples/spring/src/org/ki/samples/spring/web/JnlpController.java
@@ -31,7 +31,7 @@
 import java.util.Map;
 
 /**
- * Controller used to dynamically build a JNLP file used to launch the JSecurity
+ * Controller used to dynamically build a JNLP file used to launch the Apache Ki
  * Spring WebStart sample application.
  *
  * @author Jeremy Haile
@@ -73,7 +73,7 @@
             session = subject.getSession();
         }
         if (session == null) {
-            String msg = "Expected a non-null JSecurity session.";
+            String msg = "Expected a non-null Apache Ki session.";
             throw new IllegalArgumentException(msg);
         }
 
diff --git a/samples/spring/webroot/WEB-INF/applicationContext.xml b/samples/spring/webroot/WEB-INF/applicationContext.xml
index 1c47887..f95435f 100644
--- a/samples/spring/webroot/WEB-INF/applicationContext.xml
+++ b/samples/spring/webroot/WEB-INF/applicationContext.xml
@@ -21,7 +21,7 @@
 
 <beans>
 
-    <!-- Sample RDBMS data source that would exist in any application - not JSecurity related. -->
+    <!-- Sample RDBMS data source that would exist in any application - not Apache Ki related. -->
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
         <property name="url" value="jdbc:hsqldb:mem:jsecurity-spring"/>
@@ -32,13 +32,13 @@
         <property name="dataSource" ref="dataSource"/>
     </bean>
 
-    <!-- Simulated business-tier "Manager", not JSecurity related, just an example -->
+    <!-- Simulated business-tier "Manager", not Apache Ki related, just an example -->
     <bean id="sampleManager" class="org.ki.samples.spring.DefaultSampleManager"/>
 
     <!-- =========================================================
-         JSecurity Core Components - Not Spring Specific
+         Apache Ki Core Components - Not Spring Specific
          ========================================================= -->
-    <!-- JSecurity's main business-tier object for web-enabled applications
+    <!-- Apache Ki's main business-tier object for web-enabled applications
          (use org.kifaultSecurityManager instead when there is no web environment)-->
     <bean id="securityManager" class="org.apache.ki.web.DefaultWebSecurityManager">
         <!-- Single realm app.  If you have multiple realms, use the 'realms' property instead. -->
@@ -64,17 +64,17 @@
     </bean>
 
     <!-- =========================================================
-         JSecurity Spring-specific integration
+         Apache Ki Spring-specific integration
          ========================================================= -->
     <!-- Post processor that automatically invokes init() and destroy() methods
-         for Spring-configured JSecurity objects so you don't have to
+         for Spring-configured Apache Ki objects so you don't have to
          1) specify an init-method and destroy-method attributes for every bean
             definition and
-         2) even know which JSecurity objects require these methods to be
+         2) even know which Apache Ki objects require these methods to be
             called. -->
     <bean id="lifecycleBeanPostProcessor" class="org.apache.ki.spring.LifecycleBeanPostProcessor"/>
 
-    <!-- Enable JSecurity Annotations for Spring-configured beans.  Only run after
+    <!-- Enable Apache Ki Annotations for Spring-configured beans.  Only run after
          the lifecycleBeanProcessor has run: -->
     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
           depends-on="lifecycleBeanPostProcessor"/>
diff --git a/samples/spring/webroot/WEB-INF/classes/log4j.properties b/samples/spring/webroot/WEB-INF/classes/log4j.properties
index 838d403..c84c628 100644
--- a/samples/spring/webroot/WEB-INF/classes/log4j.properties
+++ b/samples/spring/webroot/WEB-INF/classes/log4j.properties
@@ -28,7 +28,7 @@
 # Spring
 log4j.logger.org.springframework=WARN
 
-# Default JSecurity logging
+# Default Apache Ki logging
 log4j.logger.org.ki=TRACE
 
 # Disable verbose logging
diff --git a/samples/spring/webroot/WEB-INF/resources/jsecurity.jnlp.jsp b/samples/spring/webroot/WEB-INF/resources/jsecurity.jnlp.jsp
index 911ef08..4b4420d 100644
--- a/samples/spring/webroot/WEB-INF/resources/jsecurity.jnlp.jsp
+++ b/samples/spring/webroot/WEB-INF/resources/jsecurity.jnlp.jsp
@@ -19,14 +19,14 @@
 <%@ page contentType="application/x-java-jnlp-file" %>
 
 <?xml version="1.0" encoding="utf-8"?>
-<!-- JNLP File for JSecurity Sample Application -->
+<!-- JNLP File for Apache Ki Sample Application -->
 <jnlp spec="1.0+" codebase="${codebaseUrl}">
     <information>
-        <title>JSecurity Sample Application</title>
-        <vendor>JSecurity</vendor>
+        <title>Apache Ki Sample Application</title>
+        <vendor>Apache Ki</vendor>
         <homepage href="http://www.jsecurity.org"/>
-        <description>JSecurity Sample Application</description>
-        <description kind="short">A webstart application used to demonstrate JSecurity session and security
+        <description>Apache Ki Sample Application</description>
+        <description kind="short">A webstart application used to demonstrate Apache Ki session and security
             management.
         </description>
         <icon kind="splash" href="logo.png"/>
@@ -44,4 +44,4 @@
         <property name="jsecurity.session.id" value="${sessionId}"/>
     </resources>
     <application-desc main-class="org.ki.samples.spring.ui.WebStartDriver"/>
-</jnlp>
\ No newline at end of file
+</jnlp>
diff --git a/samples/spring/webroot/WEB-INF/resources/login.jsp b/samples/spring/webroot/WEB-INF/resources/login.jsp
index 2e7d4fc..a707f12 100644
--- a/samples/spring/webroot/WEB-INF/resources/login.jsp
+++ b/samples/spring/webroot/WEB-INF/resources/login.jsp
@@ -28,7 +28,7 @@
 
 <div id="contentBox">
 
-    <h1>JSecurity Login</h1>
+    <h1>Apache Ki Login</h1>
 
     <p>
         <span style="color: red;">
@@ -48,4 +48,4 @@
 </div>
 </body>
 
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/spring/webroot/WEB-INF/web.xml b/samples/spring/webroot/WEB-INF/web.xml
index 13fda1a..231a878 100644
--- a/samples/spring/webroot/WEB-INF/web.xml
+++ b/samples/spring/webroot/WEB-INF/web.xml
@@ -56,16 +56,16 @@
          Filters
          ================================================================== -->
     <filter>
-        <filter-name>JSecurityFilter</filter-name>
-        <filter-class>org.apache.ki.spring.SpringJSecurityFilter</filter-class>
+        <filter-name>Apache KiFilter</filter-name>
+        <filter-class>org.apache.ki.spring.SpringApache KiFilter</filter-class>
 
         <init-param>
             <param-name>config</param-name>
             <param-value>
-                # The JSecurityFilter configuration is very powerful and flexible, while still remaining succinct.
+                # The Apache KiFilter configuration is very powerful and flexible, while still remaining succinct.
                 # Please read the comprehensive example, with full comments and explanations, in the JavaDoc:
                 #
-                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/JSecurityFilter.html
+                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/Apache KiFilter.html
 
                 [filters]
                 jsecurity.loginUrl = /s/login
@@ -81,11 +81,11 @@
     </filter>
 
     <filter-mapping>
-        <filter-name>JSecurityFilter</filter-name>
+        <filter-name>Apache KiFilter</filter-name>
         <url-pattern>/s/*</url-pattern>
     </filter-mapping>
     <filter-mapping>
-        <filter-name>JSecurityFilter</filter-name>
+        <filter-name>Apache KiFilter</filter-name>
         <url-pattern>/remoting/*</url-pattern>
     </filter-mapping>
 
diff --git a/samples/standalone/src/log4j.properties b/samples/standalone/src/log4j.properties
index 584db3c..079dea5 100644
--- a/samples/standalone/src/log4j.properties
+++ b/samples/standalone/src/log4j.properties
@@ -28,7 +28,7 @@
 # Spring
 log4j.logger.org.springframework=WARN
 
-# Default JSecurity logging
+# Default Apache Ki logging
 log4j.logger.org.ki=TRACE
 
 # Disable verbose logging
diff --git a/samples/web/webroot/WEB-INF/classes/log4j.properties b/samples/web/webroot/WEB-INF/classes/log4j.properties
index f32841a..c37ce9b 100644
--- a/samples/web/webroot/WEB-INF/classes/log4j.properties
+++ b/samples/web/webroot/WEB-INF/classes/log4j.properties
@@ -37,11 +37,11 @@
 log4j.logger.org.quartz=WARN
 
 # =============================================================================
-# JSecurity
+# Apache Ki
 # =============================================================================
-# JSecurity security framework
+# Apache Ki security framework
 log4j.logger.org.apache.ki.realm.text.PropertiesRealm=INFO
 log4j.logger.org.apache.ki.cache.ehcache.EhCache=INFO
 log4j.logger.org.ki.io=INFO
 log4j.logger.org.ki.web.servlet=INFO
-log4j.logger.org.apache.ki.util.ThreadContext=INFO
\ No newline at end of file
+log4j.logger.org.apache.ki.util.ThreadContext=INFO
diff --git a/samples/web/webroot/WEB-INF/web.xml b/samples/web/webroot/WEB-INF/web.xml
index 3942382..a9353dd 100644
--- a/samples/web/webroot/WEB-INF/web.xml
+++ b/samples/web/webroot/WEB-INF/web.xml
@@ -23,16 +23,16 @@
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
     <filter>
-        <filter-name>JSecurityFilter</filter-name>
-        <filter-class>org.apache.ki.web.servlet.JSecurityFilter</filter-class>
+        <filter-name>Apache KiFilter</filter-name>
+        <filter-class>org.apache.ki.web.servlet.Apache KiFilter</filter-class>
         <init-param>
             <param-name>config</param-name>
             <param-value>
 
-                # The JSecurityFilter configuration is very powerful and flexible, while still remaining succinct.
+                # The Apache KiFilter configuration is very powerful and flexible, while still remaining succinct.
                 # Please read the comprehensive example, with full comments and explanations, in the JavaDoc:
                 #
-                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/JSecurityFilter.html
+                # http://www.jsecurity.org/api/org/jsecurity/web/servlet/Apache KiFilter.html
 
                 [main]
 
@@ -56,7 +56,7 @@
     </filter>
 
     <filter-mapping>
-        <filter-name>JSecurityFilter</filter-name>
+        <filter-name>Apache KiFilter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
 
diff --git a/samples/web/webroot/home.jsp b/samples/web/webroot/home.jsp
index b6f1762..9cd85f4 100644
--- a/samples/web/webroot/home.jsp
+++ b/samples/web/webroot/home.jsp
@@ -24,14 +24,14 @@
 </head>
 <body>
 
-<h1>JSecurity Quickstart</h1>
+<h1>Apache Ki Quickstart</h1>
 
 <p>Hi <jsec:guest>Guest</jsec:guest><jsec:user><jsec:principal/></jsec:user>!
     ( <jsec:user><a href="<c:url value="/logout.jsp"/>">Log out</a></jsec:user>
     <jsec:guest><a href="<c:url value="/login.jsp"/>">Log in</a> (sample accounts provided)</jsec:guest> )
 </p>
 
-<p>Welcome to the JSecurity Quickstart sample application.
+<p>Welcome to the Apache Ki Quickstart sample application.
     This page represents the home page of any web application.</p>
 
 <jsec:user><p>Visit your <a href="<c:url value="/account"/>">account page</a>.</p></jsec:user>
@@ -65,4 +65,4 @@
 
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/samples/web/webroot/logout.jsp b/samples/web/webroot/logout.jsp
index 0930362..b3e389f 100644
--- a/samples/web/webroot/logout.jsp
+++ b/samples/web/webroot/logout.jsp
@@ -30,7 +30,7 @@
 
       When a user logs out, any 'rememberMe' identity
       should always be cleared.  In a web application,
-      JSecurity uses a Cipher-encrypted Cookie to
+      Apache Ki uses a Cipher-encrypted Cookie to
       remember a user's identity by default, and it will
       automatically delete the Cookie upon a logout.
 
@@ -66,4 +66,4 @@
 <p>You have succesfully logged out. <a href="<c:url value="/home.jsp"/>">Return to the home page.</a></p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java b/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
index df1b2cd..2e20d87 100644
--- a/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
+++ b/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
@@ -32,7 +32,7 @@
 import org.apache.ki.cache.CacheException;
 
 /**
- * JSecurity {@link org.apache.ki.cache.Cache} implementation that wraps an {@link net.sf.ehcache.Ehcache} instance.
+ * Apache Ki {@link org.apache.ki.cache.Cache} implementation that wraps an {@link net.sf.ehcache.Ehcache} instance.
  *
  * @author Jeremy Haile
  * @author Les Hazlewood
@@ -52,7 +52,7 @@
     /**
      * Constructs a new EhCache instance with the given cache.
      *
-     * @param cache - delegate EhCache instance this JSecurity cache instance will wrap.
+     * @param cache - delegate EhCache instance this Apache Ki cache instance will wrap.
      */
     public EhCache(net.sf.ehcache.Cache cache) {
         if (cache == null) {
diff --git a/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java b/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
index 5d9c3d0..d1c54c7 100644
--- a/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
+++ b/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
@@ -33,12 +33,12 @@
 import org.apache.ki.util.Initializable;
 
 /**
- * JSecurity <code>CacheManager</code> implementation utilizing the Ehcache framework for all cache functionality.
+ * Apache Ki <code>CacheManager</code> implementation utilizing the Ehcache framework for all cache functionality.
  * <p/>
  * This class can {@link #setCacheManager(net.sf.ehcache.CacheManager) accept} a manually configured
  * {@link net.sf.ehcache.CacheManager net.sf.ehcache.CacheManager} instance,
  * or an <code>ehcache.xml</code> path location can be specified instead and one will be constructed. If neither are
- * specified, JSecurity's failsafe <code><a href="./ehcache.xml">ehcache.xml</a></code> file will be used by default.
+ * specified, Apache Ki's failsafe <code><a href="./ehcache.xml">ehcache.xml</a></code> file will be used by default.
  *
  * <p>This implementation requires EhCache 1.2 and above. Make sure EhCache 1.1 or earlier
  * is not in the classpath or it will not work.</p>
@@ -178,7 +178,7 @@
                 }
                 if (name.equals(DEFAULT_ACTIVE_SESSIONS_CACHE_NAME)) {
                     if (log.isInfoEnabled()) {
-                        log.info("Creating " + DEFAULT_ACTIVE_SESSIONS_CACHE_NAME + " cache with default JSecurity " +
+                        log.info("Creating " + DEFAULT_ACTIVE_SESSIONS_CACHE_NAME + " cache with default Apache Ki " +
                                 "session cache settings.");
                     }
                     cache = buildDefaultActiveSessionsCache();
@@ -204,10 +204,10 @@
     }
 
     /**
-     * Builds the default cache instance to use for JSecurity's Session Cache when enterprise Sessions are
+     * Builds the default cache instance to use for Apache Ki's Session Cache when enterprise Sessions are
      * enabled.
      *
-     * @return the default cache instance to use for JSecurity's Session Cache when enterprise Sessions are
+     * @return the default cache instance to use for Apache Ki's Session Cache when enterprise Sessions are
      *         enabled.
      * @throws CacheException if there is a problem constructing the Cache instance.
      */
@@ -233,8 +233,8 @@
      * Ehcache will look for an <tt>ehcache.xml</tt> file at the root of the classpath.  If one is not found,
      * Ehcache will use its own failsafe configuration file.</p>
      *
-     * <p>Because JSecurity cannot use the failsafe defaults (failsafe expunges cached objects after 2 minutes,
-     * something not desireable for JSecurity sessions), this class manages an internal default configuration for
+     * <p>Because Apache Ki cannot use the failsafe defaults (failsafe expunges cached objects after 2 minutes,
+     * something not desireable for Apache Ki sessions), this class manages an internal default configuration for
      * this case.</p>
      *
      * @throws org.apache.ki.cache.CacheException
diff --git a/support/ehcache/src/org/apache/ki/cache/ehcache/ehcache.xml b/support/ehcache/src/org/apache/ki/cache/ehcache/ehcache.xml
index d857eea..eae3b82 100644
--- a/support/ehcache/src/org/apache/ki/cache/ehcache/ehcache.xml
+++ b/support/ehcache/src/org/apache/ki/cache/ehcache/ehcache.xml
@@ -72,10 +72,10 @@
             diskExpiryThreadIntervalSeconds="120"
             />
 
-    <!-- We want eternal="true" (with no timeToIdle or timeToLive settings) because JSecurity manages session
+    <!-- We want eternal="true" (with no timeToIdle or timeToLive settings) because Apache Ki manages session
 expirations explicitly.  If we set it to false and then set corresponding timeToIdle and timeToLive properties,
-ehcache would evict sessions without JSecurity's knowledge, which would cause many problems
-(e.g. "My JSecurity session timeout is 30 minutes - why isn't a session available after 2 minutes?"
+ehcache would evict sessions without Apache Ki's knowledge, which would cause many problems
+(e.g. "My Apache Ki session timeout is 30 minutes - why isn't a session available after 2 minutes?"
 Answer - ehcache expired it due to the timeToIdle property set to 120 seconds.)
 
 diskPersistent=true since we want an enterprise session management feature - ability to use sessions after
diff --git a/support/ehcache/src/org/apache/ki/cache/ehcache/package-info.java b/support/ehcache/src/org/apache/ki/cache/ehcache/package-info.java
index bfab093..800c9ea 100644
--- a/support/ehcache/src/org/apache/ki/cache/ehcache/package-info.java
+++ b/support/ehcache/src/org/apache/ki/cache/ehcache/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 /**
- * <a href="http://ehcache.sourceforge.net" target="_top">Ehcache</a>-based implementations of JSecurity's
+ * <a href="http://ehcache.sourceforge.net" target="_top">Ehcache</a>-based implementations of Apache Ki's
  * cache interfaces.
  */
-package org.ki.cache.ehcache;
\ No newline at end of file
+package org.ki.cache.ehcache;
diff --git a/support/spring/src/org/apache/ki/spring/LifecycleBeanPostProcessor.java b/support/spring/src/org/apache/ki/spring/LifecycleBeanPostProcessor.java
index b1a828f..c75feb0 100644
--- a/support/spring/src/org/apache/ki/spring/LifecycleBeanPostProcessor.java
+++ b/support/spring/src/org/apache/ki/spring/LifecycleBeanPostProcessor.java
@@ -31,9 +31,9 @@
 
 /**
  * <p>Bean post processor for Spring that automatically calls the <tt>init()</tt> and/or
- * <tt>destroy()</tt> methods on JSecurity objects that implement the {@link org.apache.ki.util.Initializable}
+ * <tt>destroy()</tt> methods on Apache Ki objects that implement the {@link org.apache.ki.util.Initializable}
  * or {@link org.apache.ki.util.Destroyable} interfaces, respectfully.  This post processor makes it easier
- * to configure JSecurity beans in Spring, since the user never has to worry about whether or not if they
+ * to configure Apache Ki beans in Spring, since the user never has to worry about whether or not if they
  * have to specify init-method and destroy-method bean attributes.</p>
  *
  * <p><b>Warning: This post processor has no way to determine if <tt>init()</tt> or <tt>destroy()</tt> have
@@ -103,4 +103,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/support/spring/src/org/apache/ki/spring/SpringIniWebConfiguration.java b/support/spring/src/org/apache/ki/spring/SpringIniWebConfiguration.java
index 6e3462c..24fb67c 100644
--- a/support/spring/src/org/apache/ki/spring/SpringIniWebConfiguration.java
+++ b/support/spring/src/org/apache/ki/spring/SpringIniWebConfiguration.java
@@ -37,18 +37,18 @@
 
 
 /**
- * <p>JSecurity configuration that relies on Spring to define and initialize the JSecurity SecurityManager
- * instance (and all of its dependencies) and makes it available to the JSecurityFilter by performing a Spring bean
+ * <p>Apache Ki configuration that relies on Spring to define and initialize the Apache Ki SecurityManager
+ * instance (and all of its dependencies) and makes it available to the Apache KiFilter by performing a Spring bean
  * lookup.  The URL/filter definitions are still .ini based and loaded according to the behavior of the parent class
  * {@link org.apache.ki.web.config.IniWebConfiguration}</p>
  * <p/>
- * That is, this class is offers a hybrid means of configuring JSecurity in Spring apps deployed in a web container:
+ * That is, this class is offers a hybrid means of configuring Apache Ki in Spring apps deployed in a web container:
  * Spring XML config for the SecurityManager and its dependencies (realms, etc), and .ini format for configuring
  * the filters and the url chains in web.xml, which many people like to maintain separation of concerns:
  * the web/filter/url config stays in web.xml, whereas the SecurityManager config (really a business-tier concern)
  * stays in Spring .xml files.
  * <p/>
- * The behavior used to acquire the JSecurity <code>SecurityManager</code> is as follows:
+ * The behavior used to acquire the Apache Ki <code>SecurityManager</code> is as follows:
  * <ol>
  * <li>If a 'securityManagerBeanName' init-param is set, retrieve that sec manager from Spring.</li>
  * <li>If not, look for beans of type {@link SecurityManager} - if there is one instance, use that.
diff --git a/support/spring/src/org/apache/ki/spring/SpringJSecurityFilter.java b/support/spring/src/org/apache/ki/spring/SpringJSecurityFilter.java
index 6d435c8..bc2c4ee 100644
--- a/support/spring/src/org/apache/ki/spring/SpringJSecurityFilter.java
+++ b/support/spring/src/org/apache/ki/spring/SpringJSecurityFilter.java
@@ -18,16 +18,16 @@
  */
 package org.apache.ki.spring;
 
-import org.apache.ki.web.servlet.JSecurityFilter;
+import org.apache.ki.web.servlet.Apache KiFilter;
 
 /**
- * Extension of JSecurityFilter that uses {@link SpringIniWebConfiguration} to configure JSecurity in a Spring web
+ * Extension of Apache KiFilter that uses {@link SpringIniWebConfiguration} to configure Apache Ki in a Spring web
  * environment.
  * <p/>
  * Using this class in web.xml essentially enables the following:
  * <pre>&lt;filter&gt;
- * &lt;filter-name&gt;JSecurityFilter&lt;/filter-name&gt;
- * &lt;filter-class&gt;org.jsecurity.web.servlet.JSecurityFilter&lt;/filter-class&gt;
+ * &lt;filter-name&gt;Apache KiFilter&lt;/filter-name&gt;
+ * &lt;filter-class&gt;org.jsecurity.web.servlet.Apache KiFilter&lt;/filter-class&gt;
  * &lt;init-param&gt;
  *     &lt;param-name&gt;configClassName&lt;/param-name&gt;
  *     &lt;param-value&gt;org.jsecurity.spring.SpringIniWebConfiguration&lt;param-value&gt;
@@ -46,7 +46,7 @@
  * @author Jeremy Haile
  * @since 0.2
  */
-public class SpringJSecurityFilter extends JSecurityFilter {
+public class SpringApache KiFilter extends Apache KiFilter {
 
     //TODO - complete JavaDoc
 
@@ -54,7 +54,7 @@
      * Default constructor, merely calls
      * <code>{@link #configClassName this.configClassName} = {@link SpringIniWebConfiguration SpringIniWebConfiguration}.class.getName()}</code>.
      */
-    public SpringJSecurityFilter() {
+    public SpringApache KiFilter() {
         this.configClassName = SpringIniWebConfiguration.class.getName();
     }
 }
diff --git a/support/spring/src/org/apache/ki/spring/package-info.java b/support/spring/src/org/apache/ki/spring/package-info.java
index 5ff355c..78c6846 100644
--- a/support/spring/src/org/apache/ki/spring/package-info.java
+++ b/support/spring/src/org/apache/ki/spring/package-info.java
@@ -18,6 +18,6 @@
  */
 /**
  * <a href="http://www.springframework.org" target="_top">Spring Application Framework</a> support for enabling
- * JSecurity in spring applications.
+ * Apache Ki in spring applications.
  */
-package org.ki.spring;
\ No newline at end of file
+package org.ki.spring;
diff --git a/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationExecutor.java b/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationExecutor.java
index 41492c1..07c7617 100644
--- a/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationExecutor.java
+++ b/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationExecutor.java
@@ -83,7 +83,7 @@
                 ThreadContext.bindSessionId(sessionId);
             } else {
                 if (log.isTraceEnabled()) {
-                    log.trace("RemoteInvocation did not contain a JSecurity Session id attribute under " +
+                    log.trace("RemoteInvocation did not contain a Apache Ki Session id attribute under " +
                             "key [" + SecureRemoteInvocationFactory.SESSION_ID_KEY + "].  A Subject based " +
                             "on an existing Session will not be available during the method invocatin.");
                 }
diff --git a/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationFactory.java b/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationFactory.java
index c104143..5781e86 100644
--- a/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationFactory.java
+++ b/support/spring/src/org/apache/ki/spring/remoting/SecureRemoteInvocationFactory.java
@@ -37,7 +37,7 @@
  * A {@link RemoteInvocationFactory} that passes the session ID to the server via a
  * {@link RemoteInvocation} {@link RemoteInvocation#getAttribute(String) attribute}.
  * This factory is the client-side part of
- * the JSecurity Spring remoting invocation.  A {@link SecureRemoteInvocationExecutor} should
+ * the Apache Ki Spring remoting invocation.  A {@link SecureRemoteInvocationExecutor} should
  * be used to export the server-side remote services to ensure that the appropriate
  * Subject and Session are bound to the remote thread during execution.
  *
diff --git a/support/spring/src/org/apache/ki/spring/remoting/package-info.java b/support/spring/src/org/apache/ki/spring/remoting/package-info.java
index 21aad4f..b7e6a37 100644
--- a/support/spring/src/org/apache/ki/spring/remoting/package-info.java
+++ b/support/spring/src/org/apache/ki/spring/remoting/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 /**
- * Support to enable Spring-based remote method invocations to carry a JSecurity session ID as part of the
+ * Support to enable Spring-based remote method invocations to carry a Apache Ki session ID as part of the
  * invocation payload, allowing remote clients to perform security operations.
  */
-package org.ki.spring.remoting;
\ No newline at end of file
+package org.ki.spring.remoting;
diff --git a/support/spring/src/org/apache/ki/spring/security/interceptor/AopAllianceAnnotationsAuthorizingMethodInterceptor.java b/support/spring/src/org/apache/ki/spring/security/interceptor/AopAllianceAnnotationsAuthorizingMethodInterceptor.java
index a475ee4..d36cb80 100644
--- a/support/spring/src/org/apache/ki/spring/security/interceptor/AopAllianceAnnotationsAuthorizingMethodInterceptor.java
+++ b/support/spring/src/org/apache/ki/spring/security/interceptor/AopAllianceAnnotationsAuthorizingMethodInterceptor.java
@@ -26,7 +26,7 @@
 import org.apache.ki.authz.aop.AnnotationsAuthorizingMethodInterceptor;
 
 /**
- * Allows JSecurity Annotations to work in any <a href="http://aopalliance.sourceforge.net/">AOP Alliance</a>
+ * Allows Apache Ki Annotations to work in any <a href="http://aopalliance.sourceforge.net/">AOP Alliance</a>
  * specific implementation environment (for example, Spring).
  *
  * @author Les Hazlewood
@@ -38,11 +38,11 @@
     /**
      * Creates a {@link MethodInvocation MethodInvocation} that wraps an
      * {@link org.aopalliance.intercept.MethodInvocation org.aopalliance.intercept.MethodInvocation} instance,
-     * enabling JSecurity Annotations in <a href="http://aopalliance.sourceforge.net/">AOP Alliance</a> environments
+     * enabling Apache Ki Annotations in <a href="http://aopalliance.sourceforge.net/">AOP Alliance</a> environments
      * (Spring, etc).
      *
      * @param implSpecificMethodInvocation AOP Alliance {@link org.aopalliance.intercept.MethodInvocation MethodInvocation}
-     * @return a JSecurity {@link MethodInvocation MethodInvocation} instance that wraps the AOP Alliance instance.
+     * @return a Apache Ki {@link MethodInvocation MethodInvocation} instance that wraps the AOP Alliance instance.
      */
     protected org.apache.ki.aop.MethodInvocation createMethodInvocation(Object implSpecificMethodInvocation) {
         final MethodInvocation mi = (MethodInvocation) implSpecificMethodInvocation;
@@ -80,7 +80,7 @@
     }
 
     /**
-     * Creates a JSecurity {@link MethodInvocation MethodInvocation} instance and then immediately calls
+     * Creates a Apache Ki {@link MethodInvocation MethodInvocation} instance and then immediately calls
      * {@link org.apache.ki.authz.aop.AuthorizingMethodInterceptor#invoke super.invoke}.
      *
      * @param methodInvocation the AOP Alliance-specific <code>methodInvocation</code> instance.
diff --git a/support/spring/src/org/apache/ki/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java b/support/spring/src/org/apache/ki/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java
index da7189e..9254ba7 100644
--- a/support/spring/src/org/apache/ki/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java
+++ b/support/spring/src/org/apache/ki/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java
@@ -61,7 +61,7 @@
     }
 
     /**
-     * Returns <tt>true</tt> if the method has any JSecurity annotations, false otherwise.
+     * Returns <tt>true</tt> if the method has any Apache Ki annotations, false otherwise.
      * The annotations inspected are:
      * <ul>
      * <li>{@link org.apache.ki.authz.annotation.RequiresAuthentication RequiresAuthentication}</li>
@@ -71,9 +71,9 @@
      * <li>{@link org.apache.ki.authz.annotation.RequiresPermissions RequiresPermissions}</li>
      * </ul>
      *
-     * @param method      the method to check for a JSecurity annotation
-     * @param targetClass the class potentially declaring JSecurity annotations
-     * @return <tt>true</tt> if the method has a JSecurity annotation, false otherwise.
+     * @param method      the method to check for a Apache Ki annotation
+     * @param targetClass the class potentially declaring Apache Ki annotations
+     * @return <tt>true</tt> if the method has a Apache Ki annotation, false otherwise.
      * @see org.springframework.aop.MethodMatcher#matches(java.lang.reflect.Method, Class)
      */
     public boolean matches(Method method, Class targetClass) {
diff --git a/support/spring/src/org/apache/ki/spring/security/interceptor/package-info.java b/support/spring/src/org/apache/ki/spring/security/interceptor/package-info.java
index 0d2b82c..64b5455 100644
--- a/support/spring/src/org/apache/ki/spring/security/interceptor/package-info.java
+++ b/support/spring/src/org/apache/ki/spring/security/interceptor/package-info.java
@@ -17,6 +17,6 @@
  * under the License.
  */
 /**
- * Spring AOP support for enabling JSecurity annotations in Spring-configured applications. 
+ * Spring AOP support for enabling Apache Ki annotations in Spring-configured applications. 
  */
-package org.ki.spring.security.interceptor;
\ No newline at end of file
+package org.ki.spring.security.interceptor;
diff --git a/support/spring/test/org/ki/spring/SpringJSecurityFilterTest.java b/support/spring/test/org/ki/spring/SpringJSecurityFilterTest.java
index 1aca5c8..c5b13e4 100644
--- a/support/spring/test/org/ki/spring/SpringJSecurityFilterTest.java
+++ b/support/spring/test/org/ki/spring/SpringJSecurityFilterTest.java
@@ -25,28 +25,28 @@
 
 import static org.easymock.EasyMock.*;
 import org.junit.Test;
-import org.apache.ki.web.servlet.JSecurityFilter;
+import org.apache.ki.web.servlet.Apache KiFilter;
 import org.springframework.web.context.WebApplicationContext;
 
 import org.apache.ki.mgt.SecurityManager;
 import org.apache.ki.spring.SpringIniWebConfiguration;
-import org.apache.ki.spring.SpringJSecurityFilter;
+import org.apache.ki.spring.SpringApache KiFilter;
 
 
 /**
  * @author Les Hazlewood
  * @since Jul 28, 2008 1:34:33 PM
  */
-public class SpringJSecurityFilterTest {
+public class SpringApache KiFilterTest {
 
     @Test
     public void testDefaultConfig() throws Exception {
-        SpringJSecurityFilter filter = new SpringJSecurityFilter();
+        SpringApache KiFilter filter = new SpringApache KiFilter();
 
         FilterConfig mockConfig = createMock(FilterConfig.class);
-        expect(mockConfig.getInitParameter(JSecurityFilter.CONFIG_CLASS_NAME_INIT_PARAM_NAME)).andReturn(null);
-        expect(mockConfig.getInitParameter(JSecurityFilter.CONFIG_INIT_PARAM_NAME)).andReturn(null);
-        expect(mockConfig.getInitParameter(JSecurityFilter.CONFIG_URL_INIT_PARAM_NAME)).andReturn(null);
+        expect(mockConfig.getInitParameter(Apache KiFilter.CONFIG_CLASS_NAME_INIT_PARAM_NAME)).andReturn(null);
+        expect(mockConfig.getInitParameter(Apache KiFilter.CONFIG_INIT_PARAM_NAME)).andReturn(null);
+        expect(mockConfig.getInitParameter(Apache KiFilter.CONFIG_URL_INIT_PARAM_NAME)).andReturn(null);
         expect(mockConfig.getInitParameter(SpringIniWebConfiguration.SECURITY_MANAGER_BEAN_NAME_PARAM_NAME)).andReturn(null);
 
         ServletContext mockContext = createMock(ServletContext.class);
diff --git a/web/src/org/apache/ki/web/WebRememberMeManager.java b/web/src/org/apache/ki/web/WebRememberMeManager.java
index 7a5b697..e8a07b9 100644
--- a/web/src/org/apache/ki/web/WebRememberMeManager.java
+++ b/web/src/org/apache/ki/web/WebRememberMeManager.java
@@ -73,9 +73,9 @@
     public WebRememberMeManager() {
         CookieAttribute<String> attr = new CookieAttribute<String>(DEFAULT_REMEMBER_ME_COOKIE_NAME);
         attr.setCheckRequestParams(false);
-        //Peter (JSecurity developer) said that Jetty didn't like the CookieAttribute.INDEFINITE value
+        //Peter (Apache Ki developer) said that Jetty didn't like the CookieAttribute.INDEFINITE value
         // (Tomcat was ok with it), so just default to a few years for now.  If anyone doesn't visit a site in 3 years
-        // after last login, I doubt any JSecurity users would mind their end-users to be forced to log in. - LAH.
+        // after last login, I doubt any Apache Ki users would mind their end-users to be forced to log in. - LAH.
         attr.setMaxAge(CookieAttribute.ONE_YEAR * 3);
         this.identityAttribute = attr;
     }
diff --git a/web/src/org/apache/ki/web/WebUtils.java b/web/src/org/apache/ki/web/WebUtils.java
index fff5449..5003d54 100644
--- a/web/src/org/apache/ki/web/WebUtils.java
+++ b/web/src/org/apache/ki/web/WebUtils.java
@@ -61,7 +61,7 @@
      * Message displayed when a servlet request or response is not bound to the current thread context when expected.
      */
     private static final String NOT_BOUND_ERROR_MESSAGE =
-            "Make sure WebUtils.bind() is being called. (typically called by JSecurityFilter)  " +
+            "Make sure WebUtils.bind() is being called. (typically called by Apache KiFilter)  " +
                     "This could also happen when running integration tests that don't properly call WebUtils.bind().";
 
     public static final String SERVLET_REQUEST_KEY = ServletRequest.class.getName() + "_JSECURITY_THREAD_CONTEXT_KEY";
@@ -319,7 +319,7 @@
      * {@link #getRequiredServletRequest() getRequiredServletRequest()} method always assumes a
      * servlet-only environment.
      * <p/>
-     * <b>THIS IS NOT PART OF JSECURITY'S PUBLIC API.</b>  It exists for JSecurity implementation requirements only.
+     * <b>THIS IS NOT PART OF JSECURITY'S PUBLIC API.</b>  It exists for Apache Ki implementation requirements only.
      * 
      * @return the current thread-bound {@code ServletRequest} or {@code null} if there is not one bound.
      * @since 1.0
@@ -405,7 +405,7 @@
      * {@link #getRequiredServletResponse() getRequiredServletResponse()} method always assumes a
      * servlet-only environment.
      * <p/>
-     * <b>THIS IS NOT PART OF JSECURITY'S PUBLIC API.</b>  It exists for JSecurity implementation requirements only.
+     * <b>THIS IS NOT PART OF JSECURITY'S PUBLIC API.</b>  It exists for Apache Ki implementation requirements only.
      *
      * @return the current thread-bound {@code ServletResponse} or {@code null} if there is not one bound.
      * @since 1.0
diff --git a/web/src/org/apache/ki/web/config/IniWebConfiguration.java b/web/src/org/apache/ki/web/config/IniWebConfiguration.java
index 0c3c863..441e61e 100644
--- a/web/src/org/apache/ki/web/config/IniWebConfiguration.java
+++ b/web/src/org/apache/ki/web/config/IniWebConfiguration.java
@@ -221,13 +221,13 @@
 
     /**
      * Creates a new, uninitialized <code>SecurityManager</code> instance that will be used to build up
-     * the JSecurity environment for the web application.
+     * the Apache Ki environment for the web application.
      * <p/>
      * The default implementation simply returns
      * <code>new {@link org.apache.ki.web.DefaultWebSecurityManager DefaultWebSecurityManager()};</code>
      *
      * @return a new, uninitialized <code>SecurityManager</code> instance that will be used to build up
-     *         the JSecurity environment for the web application.
+     *         the Apache Ki environment for the web application.
      */
     protected RealmSecurityManager newSecurityManagerInstance() {
         return new DefaultWebSecurityManager();
diff --git a/web/src/org/apache/ki/web/config/WebConfiguration.java b/web/src/org/apache/ki/web/config/WebConfiguration.java
index cc37754..eb597e6 100644
--- a/web/src/org/apache/ki/web/config/WebConfiguration.java
+++ b/web/src/org/apache/ki/web/config/WebConfiguration.java
@@ -26,7 +26,7 @@
 import org.apache.ki.config.Configuration;
 
 /**
- * A <code>WebConfiguration</code> configures JSecurity components in a web-enabled application.
+ * A <code>WebConfiguration</code> configures Apache Ki components in a web-enabled application.
  * <p/>
  * In addition to enabling configuration of a <code>SecurityManager</code>, as required by the parent interface,
  * it also allows configuration of arbitrary filter chains to be executed for any given request or URI/URL.
@@ -50,7 +50,7 @@
      *
      * @param request       the incoming ServletRequest
      * @param response      the outgoing ServletResponse
-     * @param originalChain the original <code>FilterChain</code> intercepted by the JSecurityFilter.
+     * @param originalChain the original <code>FilterChain</code> intercepted by the Apache KiFilter.
      * @return the filter chain that should be executed for the given request, or <code>null</code> if the
      *         original chain should be used.
      */
diff --git a/web/src/org/apache/ki/web/filter/AccessControlFilter.java b/web/src/org/apache/ki/web/filter/AccessControlFilter.java
index 1c06539..fa342f9 100644
--- a/web/src/org/apache/ki/web/filter/AccessControlFilter.java
+++ b/web/src/org/apache/ki/web/filter/AccessControlFilter.java
@@ -62,7 +62,7 @@
     /**
      * Returns the login URL used to authenticate a user.
      * <p/>
-     * Most JSecurity filters use this url
+     * Most Apache Ki filters use this url
      * as the location to redirect a user when the filter requires authentication.  Unless overridden, the
      * {@link #DEFAULT_LOGIN_URL DEFAULT_LOGIN_URL} is assumed, which can be overridden via
      * {@link #setLoginUrl(String) setLoginUrl}.
@@ -76,7 +76,7 @@
     /**
      * Sets the login URL used to authenticate a user.
      * <p/>
-     * Most JSecurity filters use this url as the location to redirect a user when the filter requires
+     * Most Apache Ki filters use this url as the location to redirect a user when the filter requires
      * authentication.  Unless overridden, the {@link #DEFAULT_LOGIN_URL DEFAULT_LOGIN_URL} is assumed.
      *
      * @param loginUrl the login URL used to authenticate a user, used when redirecting users if authentication is required.
diff --git a/web/src/org/apache/ki/web/filter/authc/AnonymousFilter.java b/web/src/org/apache/ki/web/filter/authc/AnonymousFilter.java
index 7bf1721..8e89754 100644
--- a/web/src/org/apache/ki/web/filter/authc/AnonymousFilter.java
+++ b/web/src/org/apache/ki/web/filter/authc/AnonymousFilter.java
@@ -32,7 +32,7 @@
  * For example, if you had a user-only section of a website, you might want to require that access to
  * any url in that section must be from an authenticated user.
  * <p/>
- * Here is how that would look in the JSecurityFilter configuration:
+ * Here is how that would look in the Apache KiFilter configuration:
  * <p/>
  * <code>[urls]<br/>
  * /user/** = authc</code>
diff --git a/web/src/org/apache/ki/web/filter/authc/BasicHttpAuthenticationFilter.java b/web/src/org/apache/ki/web/filter/authc/BasicHttpAuthenticationFilter.java
index c9c54a6..943c3b7 100644
--- a/web/src/org/apache/ki/web/filter/authc/BasicHttpAuthenticationFilter.java
+++ b/web/src/org/apache/ki/web/filter/authc/BasicHttpAuthenticationFilter.java
@@ -123,7 +123,7 @@
      * <p/>
      * Side note: As you can see from the header text, the HTTP Basic specification calls
      * this the authentication 'realm', but we call this the 'applicationName' instead to avoid confusion with
-     * JSecurity's Realm constructs.
+     * Apache Ki's Realm constructs.
      *
      * @param applicationName the name to use in the ServletResponse's 'WWW-Authenticate' header.
      */
diff --git a/web/src/org/apache/ki/web/servlet/JSecurityFilter.java b/web/src/org/apache/ki/web/servlet/JSecurityFilter.java
index 6ab4a88..e92fc75 100644
--- a/web/src/org/apache/ki/web/servlet/JSecurityFilter.java
+++ b/web/src/org/apache/ki/web/servlet/JSecurityFilter.java
@@ -47,29 +47,29 @@
 
 
 /**
- * Main ServletFilter that configures and enables all JSecurity functions within a web application.
+ * Main ServletFilter that configures and enables all Apache Ki functions within a web application.
  * <p/>
  * The following is a fully commented example that documents how to configure it:
  * <p/>
  * <pre>&lt;filter&gt;
- * &lt;filter-name&gt;JSecurityFilter&lt;/filter-name&gt;
- * &lt;filter-class&gt;org.jsecurity.web.servlet.JSecurityFilter&lt;/filter-class&gt;
+ * &lt;filter-name&gt;Apache KiFilter&lt;/filter-name&gt;
+ * &lt;filter-class&gt;org.jsecurity.web.servlet.Apache KiFilter&lt;/filter-class&gt;
  * &lt;init-param&gt;&lt;param-name&gt;config&lt;/param-name&gt;&lt;param-value&gt;
  * <p/>
  * #NOTE:  This config looks pretty long - but its not - its only 5 lines of actual config.
  * #       Everything else is just heavily commented to explain things in-depth. Feel free to delete any
  * #       comments that you don't want to read from your own configuration ;)
  * #
- * # Any commented values below are JSecurity's defaults.  If you want to change any values, you only
+ * # Any commented values below are Apache Ki's defaults.  If you want to change any values, you only
  * # need to uncomment the lines you want to change.
  * <p/>
  * [main]
- * # The 'main' section defines JSecurity-wide configuration.
+ * # The 'main' section defines Apache Ki-wide configuration.
  * #
- * # Session Mode: By default, JSecurity's Session infrastructure in a web environment will use the
+ * # Session Mode: By default, Apache Ki's Session infrastructure in a web environment will use the
  * # Servlet container's HttpSession.  However, if you need to share session state across client types
  * # (e.g. Web MVC plus Java Web Start or Flash), or are doing distributed/shared Sessions for
- * # Single Sign On, HttpSessions aren't good enough.  You'll need to use JSecurity's more powerful
+ * # Single Sign On, HttpSessions aren't good enough.  You'll need to use Apache Ki's more powerful
  * # (and client-agnostic) session management.  You can enable this by uncommenting the following line
  * # and changing 'http' to 'jsecurity'
  * #
@@ -79,7 +79,7 @@
  * [filters]
  * # This section defines the 'pool' of all Filters available to the url path definitions in the [urls] section below.
  * #
- * # The following commented values are already provided by JSecurity by default and are immediately usable
+ * # The following commented values are already provided by Apache Ki by default and are immediately usable
  * # in the [urls] definitions below.  If you like, you may override any values by uncommenting only the lines
  * # you need to change.
  * #
@@ -173,7 +173,7 @@
  * <p/>
  * <p/>
  * &lt;filter-mapping&gt;
- * &lt;filter-name&gt;JSecurityFilter&lt;/filter-name&gt;
+ * &lt;filter-name&gt;Apache KiFilter&lt;/filter-name&gt;
  * &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
  * &lt;/filter-mapping&gt;</pre>
  *
@@ -181,7 +181,7 @@
  * @author Jeremy Haile
  * @since 0.1
  */
-public class JSecurityFilter extends OncePerRequestFilter {
+public class Apache KiFilter extends OncePerRequestFilter {
 
     //TODO - complete JavaDoc
 
@@ -191,7 +191,7 @@
     public static final String CONFIG_INIT_PARAM_NAME = "config";
     public static final String CONFIG_URL_INIT_PARAM_NAME = "configUrl";
 
-    private static final Log log = LogFactory.getLog(JSecurityFilter.class);
+    private static final Log log = LogFactory.getLog(Apache KiFilter.class);
 
     protected String config;
     protected String configUrl;
@@ -201,7 +201,7 @@
     // Reference to the security manager used by this filter
     protected SecurityManager securityManager;
 
-    public JSecurityFilter() {
+    public Apache KiFilter() {
         this.configClassName = IniWebConfiguration.class.getName();
     }
 
@@ -374,7 +374,7 @@
 
     /** @since 1.0 */
     protected ServletResponse wrapServletResponse(HttpServletResponse orig, KiHttpServletRequest request) {
-        return new JSecurityHttpServletResponse(orig, getServletContext(), request);
+        return new Apache KiHttpServletResponse(orig, getServletContext(), request);
     }
 
     /** @since 1.0 */
@@ -383,8 +383,8 @@
         ServletResponse toUse = response;
         if (isHttpSessions() && (request instanceof KiHttpServletRequest) &&
             (response instanceof HttpServletResponse)) {
-            //the JSecurityHttpServletResponse exists to support URL rewriting for session ids.  This is only needed if
-            //using JSecurity sessions (i.e. not simple HttpSession based sessions):
+            //the Apache KiHttpServletResponse exists to support URL rewriting for session ids.  This is only needed if
+            //using Apache Ki sessions (i.e. not simple HttpSession based sessions):
             toUse = wrapServletResponse((HttpServletResponse) response, (KiHttpServletRequest) request);
         }
         return toUse;
diff --git a/web/src/org/apache/ki/web/servlet/JSecurityHttpServletResponse.java b/web/src/org/apache/ki/web/servlet/JSecurityHttpServletResponse.java
index bcd890b..b2b36e0 100644
--- a/web/src/org/apache/ki/web/servlet/JSecurityHttpServletResponse.java
+++ b/web/src/org/apache/ki/web/servlet/JSecurityHttpServletResponse.java
@@ -29,32 +29,32 @@
 import javax.servlet.http.HttpSession;
 
 /**
- * HttpServletResponse implementation to support URL Encoding of JSecurity Session IDs.
+ * HttpServletResponse implementation to support URL Encoding of Apache Ki Session IDs.
  *
- * It is only used when using JSecurity's native Session Management configuration (and not when using the Servlet
- * Container session configuration, which is JSecurity's default in a web environment).  Because the servlet container
- * already performs url encoding of its own session ids, instances of this class are only needed when using JSecurity
+ * It is only used when using Apache Ki's native Session Management configuration (and not when using the Servlet
+ * Container session configuration, which is Apache Ki's default in a web environment).  Because the servlet container
+ * already performs url encoding of its own session ids, instances of this class are only needed when using Apache Ki
  * native sessions.
  *
  * <p>Note that this implementation relies in part on source code from the Tomcat 6.x distribution for
- * encoding URLs for session ID URL Rewriting (we didn't want to re-invent the wheel).  Since JSecurity is also
+ * encoding URLs for session ID URL Rewriting (we didn't want to re-invent the wheel).  Since Apache Ki is also
  * Apache 2.0 license, all regular licenses and conditions have remained in tact.
  *
  * @author Les Hazlewood
  * @since 0.2
  */
 @SuppressWarnings({"deprecated", "deprecation"})
-public class JSecurityHttpServletResponse extends HttpServletResponseWrapper {
+public class Apache KiHttpServletResponse extends HttpServletResponseWrapper {
 
     //TODO - complete JavaDoc
 
-    private static final String DEFAULT_SESSION_ID_PARAMETER_NAME = JSecurityHttpSession.DEFAULT_SESSION_ID_NAME;
+    private static final String DEFAULT_SESSION_ID_PARAMETER_NAME = Apache KiHttpSession.DEFAULT_SESSION_ID_NAME;
 
     private ServletContext context = null;
     //the associated request
     private KiHttpServletRequest request = null;
 
-    public JSecurityHttpServletResponse(HttpServletResponse wrapped, ServletContext context, KiHttpServletRequest request) {
+    public Apache KiHttpServletResponse(HttpServletResponse wrapped, ServletContext context, KiHttpServletRequest request) {
         super(wrapped);
         this.context = context;
         this.request = request;
diff --git a/web/src/org/apache/ki/web/servlet/JSecurityHttpSession.java b/web/src/org/apache/ki/web/servlet/JSecurityHttpSession.java
index b8cc2aa..a52e38d 100644
--- a/web/src/org/apache/ki/web/servlet/JSecurityHttpSession.java
+++ b/web/src/org/apache/ki/web/servlet/JSecurityHttpSession.java
@@ -37,7 +37,7 @@
 
 
 /**
- * Wrapper class that uses a JSecurity session under the hood for all session operations instead of the
+ * Wrapper class that uses a Apache Ki session under the hood for all session operations instead of the
  * Servlet Container's session mechanism.  This is preferred in heterogeneous client environments where the Session
  * is used on both the business tier as well as in multiple client technologies (web, swing, flash, etc).
  *
@@ -45,7 +45,7 @@
  * @since 0.2
  */
 @SuppressWarnings({"deprecation"})
-public class JSecurityHttpSession implements HttpSession {
+public class Apache KiHttpSession implements HttpSession {
 
     //TODO - complete JavaDoc
 
@@ -73,9 +73,9 @@
 
     protected ServletContext servletContext = null;
     protected HttpServletRequest currentRequest = null;
-    protected Session session = null; //'real' JSecurity Session
+    protected Session session = null; //'real' Apache Ki Session
 
-    public JSecurityHttpSession(Session session, HttpServletRequest currentRequest, ServletContext servletContext) {
+    public Apache KiHttpSession(Session session, HttpServletRequest currentRequest, ServletContext servletContext) {
         if (session instanceof WebSession) {
             String msg = "Session constructor argument cannot be an instance of WebSession.  This is enforced to " +
                     "prevent circular dependencies and infinite loops.";
diff --git a/web/src/org/apache/ki/web/servlet/KiHttpServletRequest.java b/web/src/org/apache/ki/web/servlet/KiHttpServletRequest.java
index d8ed0bd..f777e1b 100644
--- a/web/src/org/apache/ki/web/servlet/KiHttpServletRequest.java
+++ b/web/src/org/apache/ki/web/servlet/KiHttpServletRequest.java
@@ -40,16 +40,16 @@
 
     //TODO - complete JavaDoc
 
-    //The following 7 constants support the JSecurity's implementation of the Servlet Specification
+    //The following 7 constants support the Apache Ki's implementation of the Servlet Specification
     public static final String COOKIE_SESSION_ID_SOURCE = "cookie";
     public static final String URL_SESSION_ID_SOURCE = "url";
     public static final String REFERENCED_SESSION_ID = KiHttpServletRequest.class.getName() + "_REQUESTED_SESSION_ID";
     public static final String REFERENCED_SESSION_ID_IS_VALID = KiHttpServletRequest.class.getName() + "_REQUESTED_SESSION_ID_VALID";
     public static final String REFERENCED_SESSION_IS_NEW = KiHttpServletRequest.class.getName() + "_REFERENCED_SESSION_IS_NEW";
     public static final String REFERENCED_SESSION_ID_SOURCE = KiHttpServletRequest.class.getName() + "REFERENCED_SESSION_ID_SOURCE";
-    public static final String SESSION_ID_NAME = JSecurityHttpSession.DEFAULT_SESSION_ID_NAME;
+    public static final String SESSION_ID_NAME = Apache KiHttpSession.DEFAULT_SESSION_ID_NAME;
     /**
-     * Key that may be used to alert that the request's  referenced JSecurity Session has expired prior to
+     * Key that may be used to alert that the request's  referenced Apache Ki Session has expired prior to
      * request processing.
      */
     public static final String EXPIRED_SESSION_KEY = KiHttpServletRequest.class.getName() + "_EXPIRED_SESSION_KEY";
@@ -161,7 +161,7 @@
 
                 Session jsecSession = getSubject().getSession(create);
                 if (jsecSession != null) {
-                    this.session = new JSecurityHttpSession(jsecSession, this, this.servletContext);
+                    this.session = new Apache KiHttpSession(jsecSession, this, this.servletContext);
                     if (!existing) {
                         setAttribute(REFERENCED_SESSION_IS_NEW, Boolean.TRUE);
                     }
diff --git a/web/src/org/apache/ki/web/session/DefaultWebSessionManager.java b/web/src/org/apache/ki/web/session/DefaultWebSessionManager.java
index 4d8fcc8..726a5c5 100644
--- a/web/src/org/apache/ki/web/session/DefaultWebSessionManager.java
+++ b/web/src/org/apache/ki/web/session/DefaultWebSessionManager.java
@@ -36,7 +36,7 @@
 import org.apache.ki.web.attr.RequestParamAttribute;
 import org.apache.ki.web.attr.WebAttribute;
 import org.apache.ki.web.servlet.KiHttpServletRequest;
-import org.apache.ki.web.servlet.JSecurityHttpSession;
+import org.apache.ki.web.servlet.Apache KiHttpSession;
 
 
 /**
@@ -141,7 +141,7 @@
     protected void ensureCookieSessionIdStore() {
         CookieAttribute<Serializable> cookieStore = getSessionIdCookieAttribute();
         if (cookieStore == null) {
-            cookieStore = new CookieAttribute<Serializable>(JSecurityHttpSession.DEFAULT_SESSION_ID_NAME);
+            cookieStore = new CookieAttribute<Serializable>(Apache KiHttpSession.DEFAULT_SESSION_ID_NAME);
             cookieStore.setCheckRequestParams(false);
             setSessionIdCookieAttribute(cookieStore);
         }
@@ -150,7 +150,7 @@
     protected void ensureRequestParamSessionIdStore() {
         RequestParamAttribute<Serializable> reqParamStore = getSessionIdRequestParamAttribute();
         if (reqParamStore == null) {
-            reqParamStore = new RequestParamAttribute<Serializable>(JSecurityHttpSession.DEFAULT_SESSION_ID_NAME);
+            reqParamStore = new RequestParamAttribute<Serializable>(Apache KiHttpSession.DEFAULT_SESSION_ID_NAME);
             setSessionIdRequestParamAttribute(reqParamStore);
         }
     }
@@ -294,7 +294,7 @@
             }
         } else {
             if (log.isTraceEnabled()) {
-                log.trace("No JSecurity session id associated with the given " +
+                log.trace("No Apache Ki session id associated with the given " +
                         "HttpServletRequest.  A Session will not be returned.");
             }
         }
diff --git a/web/src/org/apache/ki/web/session/ServletContainerSessionManager.java b/web/src/org/apache/ki/web/session/ServletContainerSessionManager.java
index 156f28f..749a4e0 100644
--- a/web/src/org/apache/ki/web/session/ServletContainerSessionManager.java
+++ b/web/src/org/apache/ki/web/session/ServletContainerSessionManager.java
@@ -38,8 +38,8 @@
  * Servlet container's HttpSession.
  * <p/>
  * Despite its name, this implementation <em>does not</em> itself manage Sessions since the Servlet container
- * provides the actual management support.  This class mainly exists to 'impersonate' a regular JSecurity
- * <tt>SessionManager</tt> so it can be pluggable into a normal JSecurity configuration in a pure web application.
+ * provides the actual management support.  This class mainly exists to 'impersonate' a regular Apache Ki
+ * <tt>SessionManager</tt> so it can be pluggable into a normal Apache Ki configuration in a pure web application.
  * <p/>
  * Note that because this implementation relies on the {@link HttpSession HttpSession}, it is only functional in a
  * servlet container.  I.e. it is <em>NOT</em> capable of supporting Sessions any clients other than
diff --git a/web/src/org/apache/ki/web/session/WebSession.java b/web/src/org/apache/ki/web/session/WebSession.java
index bd7dd9f..bfd8aa6 100644
--- a/web/src/org/apache/ki/web/session/WebSession.java
+++ b/web/src/org/apache/ki/web/session/WebSession.java
@@ -28,7 +28,7 @@
 
 import org.apache.ki.session.InvalidSessionException;
 import org.apache.ki.session.Session;
-import org.apache.ki.web.servlet.JSecurityHttpSession;
+import org.apache.ki.web.servlet.Apache KiHttpSession;
 
 /**
  * TODO class JavaDoc
@@ -50,8 +50,8 @@
             String msg = "HttpSession constructor argument cannot be null.";
             throw new IllegalArgumentException(msg);
         }
-        if (httpSession instanceof JSecurityHttpSession) {
-            String msg = "HttpSession constructor argument cannot be an instance of JSecurityHttpSession.  This " +
+        if (httpSession instanceof Apache KiHttpSession) {
+            String msg = "HttpSession constructor argument cannot be an instance of Apache KiHttpSession.  This " +
                     "is enforced to prevent circular dependencies and infinite loops.";
             throw new IllegalArgumentException(msg);
         }
@@ -134,7 +134,7 @@
 
     private static String assertString(Object key) {
         if (!(key instanceof String)) {
-            String msg = "HttpSession based implementations of the JSecurity Session interface requires attribute keys " +
+            String msg = "HttpSession based implementations of the Apache Ki Session interface requires attribute keys " +
                     "to be String objects.  The HttpSession class does not support anything other than String keys.";
             throw new IllegalArgumentException(msg);
         }
diff --git a/web/src/org/apache/ki/web/tags/jsecurity.tld b/web/src/org/apache/ki/web/tags/jsecurity.tld
index d963df5..ebc0ea5 100644
--- a/web/src/org/apache/ki/web/tags/jsecurity.tld
+++ b/web/src/org/apache/ki/web/tags/jsecurity.tld
@@ -26,11 +26,11 @@
 
   <jsp-version>1.2</jsp-version>
 
-  <short-name>JSecurity</short-name>
+  <short-name>Apache Ki</short-name>
 
   <uri>http://www.jsecurity.org/tags</uri>
 
-  <description>JSecurity JSP Tag Library. Authors: Les Hazlewood, Jeremy Haile</description>
+  <description>Apache Ki JSP Tag Library. Authors: Les Hazlewood, Jeremy Haile</description>
 
   <tag>
     <name>hasPermission</name>
@@ -163,4 +163,4 @@
     </attribute>
   </tag>
 
-</taglib>
\ No newline at end of file
+</taglib>
diff --git a/web/src/org/ki/web/attr/package-info.java b/web/src/org/ki/web/attr/package-info.java
index 913b117..565cf3d 100644
--- a/web/src/org/ki/web/attr/package-info.java
+++ b/web/src/org/ki/web/attr/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 /**
- * Supporting implementation of JSecurity's concept of a {@link org.apache.ki.web.attr.WebAttribute WebAttribute}, a
+ * Supporting implementation of Apache Ki's concept of a {@link org.apache.ki.web.attr.WebAttribute WebAttribute}, a
  * component that can save and recall an object beyond transient requests.
  */
-package org.ki.web.attr;
\ No newline at end of file
+package org.ki.web.attr;
diff --git a/web/src/org/ki/web/tags/package-info.java b/web/src/org/ki/web/tags/package-info.java
index 82d52cd..decd2ae 100644
--- a/web/src/org/ki/web/tags/package-info.java
+++ b/web/src/org/ki/web/tags/package-info.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 /**
- * Provides the JSecurity JSP Tag Library implementations.
+ * Provides the Apache Ki JSP Tag Library implementations.
  * <p/>
- * JSecurity JSP Tags can be used to evalute or not evaluate (show or not show) parts of a JSP page based on the
+ * Apache Ki JSP Tags can be used to evalute or not evaluate (show or not show) parts of a JSP page based on the
  * current user's authentication status and/or authorization (access control) abilities.
  */
-package org.ki.web.tags;
\ No newline at end of file
+package org.ki.web.tags;
diff --git a/web/test/org/ki/web/servlet/JSecurityFilterTest.java b/web/test/org/ki/web/servlet/JSecurityFilterTest.java
index 6156817..3a23312 100644
--- a/web/test/org/ki/web/servlet/JSecurityFilterTest.java
+++ b/web/test/org/ki/web/servlet/JSecurityFilterTest.java
@@ -24,16 +24,16 @@
 import static org.easymock.EasyMock.*;
 import org.junit.Test;
 
-import org.apache.ki.web.servlet.JSecurityFilter;
+import org.apache.ki.web.servlet.Apache KiFilter;
 
 
 /**
  * @author Les Hazlewood
  * @since 0.9
  */
-public class JSecurityFilterTest {
+public class Apache KiFilterTest {
 
-    private JSecurityFilter filter;
+    private Apache KiFilter filter;
     private FilterConfig mockFilterConfig;
     private ServletContext mockServletContext;
 
@@ -42,9 +42,9 @@
         mockServletContext = createMock(ServletContext.class);
 
         expect(mockFilterConfig.getServletContext()).andReturn(mockServletContext);
-        expect(mockFilterConfig.getInitParameter(JSecurityFilter.CONFIG_CLASS_NAME_INIT_PARAM_NAME)).andReturn(null).once();
-        expect(mockFilterConfig.getInitParameter(JSecurityFilter.CONFIG_INIT_PARAM_NAME)).andReturn(config).once();
-        expect(mockFilterConfig.getInitParameter(JSecurityFilter.CONFIG_URL_INIT_PARAM_NAME)).andReturn(null).once();
+        expect(mockFilterConfig.getInitParameter(Apache KiFilter.CONFIG_CLASS_NAME_INIT_PARAM_NAME)).andReturn(null).once();
+        expect(mockFilterConfig.getInitParameter(Apache KiFilter.CONFIG_INIT_PARAM_NAME)).andReturn(config).once();
+        expect(mockFilterConfig.getInitParameter(Apache KiFilter.CONFIG_URL_INIT_PARAM_NAME)).andReturn(null).once();
     }
 
     public void tearDown() throws Exception {
@@ -63,7 +63,7 @@
         replay(mockServletContext);
         replay(mockFilterConfig);
 
-        this.filter = new JSecurityFilter();
+        this.filter = new Apache KiFilter();
         this.filter.init(mockFilterConfig);
 
 
