diff --git a/pom.xml b/pom.xml
index ded6600..0a2c294 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,18 @@
     </build>
     <dependencies>
         <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>jackrabbit-jcr-server</artifactId>
+            <version>2.2.8</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>jackrabbit-webdav</artifactId>
+            <version>2.2.8</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
             <scope>provided</scope>
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/AbstractHandler.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/AbstractHandler.java
new file mode 100644
index 0000000..169057f
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/AbstractHandler.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.launchpad.testservices.handlers;
+
+import org.apache.jackrabbit.server.io.ExportContext;
+import org.apache.jackrabbit.server.io.IOManager;
+import org.apache.jackrabbit.server.io.ImportContext;
+import org.apache.jackrabbit.server.io.PropertyExportContext;
+import org.apache.jackrabbit.server.io.PropertyImportContext;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.property.PropEntry;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * This handler can export only if the path given in the context contains the handler name.
+ */
+public abstract class AbstractHandler implements
+        org.apache.jackrabbit.server.io.IOHandler,
+        org.apache.jackrabbit.server.io.PropertyHandler {
+
+    private static final String HANDLER_IDENTIFIER = "handler-identifier";
+
+    private IOManager ioManager ;
+
+    // IOHandler
+
+    public IOManager getIOManager() {
+        return ioManager;
+    }
+
+    public void setIOManager(IOManager ioManager) {
+        this.ioManager = ioManager;
+    }
+
+    public String getName() {
+        return getClass().getName();
+    }
+
+    public boolean canImport(ImportContext context, DavResource davResource) {
+        return canImport(context, davResource.isCollection());
+    }
+
+    public boolean canImport(ImportContext context, boolean b) {
+        return false;
+    }
+
+    public boolean importContent(ImportContext context, DavResource davResource) throws IOException {
+        return importContent(context, davResource.isCollection());
+    }
+
+    public boolean importContent(ImportContext context, boolean b) throws IOException {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean canExport(ExportContext context, boolean b) {
+        try {
+            final Node node = (Node) context.getExportRoot();
+            return matches(node.getPath());
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    public boolean canExport(ExportContext context, DavResource davResource) {
+        return canExport(context, davResource.isCollection());
+    }
+
+    public boolean exportContent(ExportContext context, DavResource davResource) throws IOException {
+        return exportContent(context, davResource.isCollection());
+    }
+
+    public boolean exportContent(ExportContext context, boolean b) throws IOException {
+        context.setProperty(HANDLER_IDENTIFIER, getIdentifier());
+        return true;
+    }
+
+    // PropertyHandler
+
+    public boolean canExport(PropertyExportContext context, boolean b) {
+        try {
+            final Node node = (Node) context.getExportRoot();
+            return matches(node.getPath());
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    public boolean exportProperties(PropertyExportContext context, boolean b) throws RepositoryException {
+        context.setProperty(HANDLER_IDENTIFIER, getIdentifier());
+        return true;
+    }
+
+    public boolean canImport(PropertyImportContext context, boolean b) {
+        return false;
+    }
+
+    public Map<? extends PropEntry, ?> importProperties(PropertyImportContext context, boolean b) throws RepositoryException {
+        throw new UnsupportedOperationException();
+    }
+
+    //
+
+    public String getIdentifier() {
+        return getHandlerName() + "-";
+    }
+
+    public boolean matches(String path) {
+        return path != null && path.contains(getHandlerName());
+    }
+
+    //
+
+    public abstract String getHandlerName() ;
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java
new file mode 100644
index 0000000..829ccae
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.launchpad.testservices.handlers;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Constants;
+
+@Component(metatype = true)
+@Property(name = Constants.SERVICE_RANKING, intValue = 3, propertyPrivate = false)
+@Service(value = {
+        org.apache.jackrabbit.server.io.IOHandler.class,
+        org.apache.jackrabbit.server.io.PropertyHandler.class})
+public class TestHandler1 extends AbstractHandler {
+
+    @Override
+    public String getHandlerName(){
+        return "test-io-handler-1";
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java
new file mode 100644
index 0000000..115be73
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.launchpad.testservices.handlers;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Constants;
+
+@Component(metatype = true)
+@Property(name = Constants.SERVICE_RANKING, intValue = 2, propertyPrivate = false)
+@Service(value = {
+        org.apache.jackrabbit.server.io.IOHandler.class,
+        org.apache.jackrabbit.server.io.PropertyHandler.class})
+public class TestHandler2 extends AbstractHandler {
+
+    @Override
+    public String getHandlerName(){
+        return "test-io-handler-11";
+    }
+}
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java
new file mode 100644
index 0000000..6562ceb
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.launchpad.testservices.handlers;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Constants;
+
+@Component(metatype = true)
+@Property(name = Constants.SERVICE_RANKING, intValue = 1, propertyPrivate = false)
+@Service(value = {
+        org.apache.jackrabbit.server.io.IOHandler.class,
+        org.apache.jackrabbit.server.io.PropertyHandler.class})
+public class TestHandler3 extends AbstractHandler {
+
+    @Override
+    public String getHandlerName(){
+        return "test-io-handler-111";
+    }
+}
