diff --git a/pom.xml b/pom.xml
index a2cece3..c69423d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,4 +135,27 @@
         </dependency>
     </dependencies>
 
+	<profiles>
+		<profile>
+			<id>autoInstallBundle</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.sling</groupId>
+						<artifactId>maven-sling-plugin</artifactId>
+						<version>2.1.0</version>
+						<executions>
+							<execution>
+								<id>install-bundle</id>
+								<goals>
+									<goal>install</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+
 </project>
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java b/src/main/java/org/apache/sling/serviceusermapping/Mapping.java
similarity index 93%
rename from src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java
rename to src/main/java/org/apache/sling/serviceusermapping/Mapping.java
index 9dfc7c3..87608c0 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/Mapping.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.serviceusermapping.impl;
+package org.apache.sling.serviceusermapping;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
@@ -25,13 +25,13 @@
  * The <code>Mapping</code> class defines the mapping of a service's name and
  * optional service information to a user name and optionally to a set of principal names.
  */
-class Mapping implements Comparable<Mapping> {
+public class Mapping implements Comparable<Mapping> {
 
 
     /**
      * The name of the osgi property holding the service name.
      */
-    static String SERVICENAME = ".serviceName";
+    public static String SERVICENAME = ".serviceName";
 
     private final String serviceName;
 
@@ -54,7 +54,7 @@
      * @throws IllegalArgumentException if {@code spec} does not match the
      *             expected pattern.
      */
-    Mapping(final String spec) {
+    public Mapping(final String spec) {
 
         final int colon = spec.indexOf(':');
         final int equals = spec.indexOf('=');
@@ -85,7 +85,7 @@
         }
     }
 
-    static Set<String> extractPrincipalNames(String s) {
+    public static Set<String> extractPrincipalNames(String s) {
         String[] sArr = s.substring(1, s.length() - 1).split(",");
         Set<String> set = new LinkedHashSet<>();
         for (String name : sArr) {
@@ -108,7 +108,7 @@
      *            {@code null}.
      * @return The user name if this mapping matches and the configuration doesn't specify a set of principal names; {@code null} otherwise.
      */
-    String map(final String serviceName, final String subServiceName) {
+    public String map(final String serviceName, final String subServiceName) {
         if (this.serviceName.equals(serviceName) && equals(this.subServiceName, subServiceName)) {
             return userName;
         }
@@ -130,7 +130,7 @@
      * does specify a set of principal names (intstead of a single user name); {@code null}
      * otherwise.
      */
-    Iterable<String> mapPrincipals(final String serviceName, final String subServiceName) {
+    public Iterable<String> mapPrincipals(final String serviceName, final String subServiceName) {
         if (this.serviceName.equals(serviceName) && equals(this.subServiceName, subServiceName)) {
             return principalNames;
         }
diff --git a/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java b/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
index 8431d7e..303c2d6 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.serviceusermapping;
 
+import java.util.List;
+
 import org.osgi.annotation.versioning.ProviderType;
 import org.osgi.framework.Bundle;
 
@@ -57,33 +59,46 @@
 @ProviderType
 public interface ServiceUserMapper {
 
-    /**
-     * Returns the ID of a user to access the data store on behalf of the
-     * service.
-     *
-     * @param bundle The bundle implementing the service request access to
-     *            resources.
-     * @param subServiceName Name of the sub service. This parameter is optional and
-     *            may be an empty string or {@code null}.
-     * @return The ID of the user to use to provide access to the resources for
-     *         the service. This may be {@code null} if no particular user can
-     *         be derived for the service identified by the bundle and the
-     *         optional {@code serviceInfo}.
-     */
-    String getServiceUserID(Bundle bundle, String subServiceName);
+	/**
+	 * Returns the ID of a user to access the data store on behalf of the
+	 * service.
+	 *
+	 * @param bundle
+	 *            The bundle implementing the service request access to
+	 *            resources.
+	 * @param subServiceName
+	 *            Name of the sub service. This parameter is optional and may be
+	 *            an empty string or {@code null}.
+	 * @return The ID of the user to use to provide access to the resources for
+	 *         the service. This may be {@code null} if no particular user can
+	 *         be derived for the service identified by the bundle and the
+	 *         optional {@code serviceInfo}.
+	 */
+	String getServiceUserID(Bundle bundle, String subServiceName);
 
-    /**
-     * Returns the principal names to access the data store on behalf of the
-     * service.
-     *
-     * @param bundle The bundle implementing the service request access to resources.
-     * @param subServiceName Name of the sub service. This parameter is optional
-     *                       and may be an empty string or {@code null}.
-     * @return The principal names to use to provide access to the resources for
-     *         the service. This may be {@code null} if no mapping has been defined
-     *         for the service identified by the bundle and the optional {@code serviceInfo}
-     *         or if no principal names have been specified with the mapping.
-     *         In this case {@link #getServiceUserID(Bundle, String)} should be used instead.
-     */
-    Iterable<String> getServicePrincipalNames(Bundle bundle, String subServiceName);
+	/**
+	 * Returns the principal names to access the data store on behalf of the
+	 * service.
+	 *
+	 * @param bundle
+	 *            The bundle implementing the service request access to
+	 *            resources.
+	 * @param subServiceName
+	 *            Name of the sub service. This parameter is optional and may be
+	 *            an empty string or {@code null}.
+	 * @return The principal names to use to provide access to the resources for
+	 *         the service. This may be {@code null} if no mapping has been
+	 *         defined for the service identified by the bundle and the optional
+	 *         {@code serviceInfo} or if no principal names have been specified
+	 *         with the mapping. In this case
+	 *         {@link #getServiceUserID(Bundle, String)} should be used instead.
+	 */
+	Iterable<String> getServicePrincipalNames(Bundle bundle, String subServiceName);
+
+	/**
+	 * Returns a list of all of the active mappings in the Service User Mapper.
+	 * 
+	 * @return A list of the currently active mapped Service users
+	 */
+	List<Mapping> getActiveMappings();
 }
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java
index 60a425d..7db359a 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java
@@ -20,6 +20,7 @@
 
 import java.util.ArrayList;
 
+import org.apache.sling.serviceusermapping.Mapping;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
index 8f32898..821a72c 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
@@ -30,6 +30,7 @@
 import org.apache.felix.inventory.Format;
 import org.apache.felix.inventory.InventoryPrinter;
 import org.apache.felix.utils.json.JSONWriter;
+import org.apache.sling.serviceusermapping.Mapping;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilter.java b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilter.java
index a8b0719..bdf794c 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilter.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilter.java
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.sling.serviceusermapping.Mapping;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceEvent;
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
index a963b95..7fb23e4 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
@@ -35,6 +35,7 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import org.apache.sling.serviceusermapping.Mapping;
 import org.apache.sling.serviceusermapping.ServicePrincipalsValidator;
 import org.apache.sling.serviceusermapping.ServiceUserMapped;
 import org.apache.sling.serviceusermapping.ServiceUserMapper;
@@ -500,7 +501,7 @@
         return bundle.getSymbolicName();
     }
 
-    List<Mapping> getActiveMappings() {
+    public List<Mapping> getActiveMappings() {
         return Collections.unmodifiableList(Arrays.asList(activeMappings));
     }
 
diff --git a/src/main/java/org/apache/sling/serviceusermapping/package-info.java b/src/main/java/org/apache/sling/serviceusermapping/package-info.java
index 1ee3078..547a6af 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/package-info.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/package-info.java
@@ -17,6 +17,6 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.3.0")
+@org.osgi.annotation.versioning.Version("1.4.0")
 package org.apache.sling.serviceusermapping;
 
diff --git a/src/test/java/org/apache/sling/serviceusermapping/impl/MappingTest.java b/src/test/java/org/apache/sling/serviceusermapping/impl/MappingTest.java
index 2ade43e..423de1b 100644
--- a/src/test/java/org/apache/sling/serviceusermapping/impl/MappingTest.java
+++ b/src/test/java/org/apache/sling/serviceusermapping/impl/MappingTest.java
@@ -23,6 +23,8 @@
 import java.util.Set;
 
 import junit.framework.TestCase;
+
+import org.apache.sling.serviceusermapping.Mapping;
 import org.junit.Test;
 
 public class MappingTest {
diff --git a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilterTest.java b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilterTest.java
index 9f12426..e95ef7e 100644
--- a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilterTest.java
+++ b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMappedBundleFilterTest.java
@@ -21,6 +21,8 @@
 
 
 import junit.framework.TestCase;
+
+import org.apache.sling.serviceusermapping.Mapping;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
