You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2022/09/29 08:55:22 UTC

[sling-ide-tooling] 01/01: SLING-11590 Make compatible with m2e 2.x

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/m2e-2.x-compatibility
in repository https://gitbox.apache.org/repos/asf/sling-ide-tooling.git

commit ff37dc8ceaf42adbf0668a544d1eaa3244e43a1c
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Sep 29 10:55:14 2022 +0200

    SLING-11590 Make compatible with m2e 2.x
    
    Require at least Eclipse 2022-09
    Update Eclipse plugins to Java 17
    Update to Tycho 2.7.5
    No longer generate p2 repo for plain OSGi bundles
    Update to latest dependencies/parent poms
---
 .gitignore                                         |   1 +
 Jenkinsfile                                        |  10 +-
 README.md                                          |   8 +-
 build.sh                                           |  12 +-
 cli/cli/pom.xml                                    |  18 +-
 cli/pom.xml                                        |   2 +-
 eclipse/eclipse-core/META-INF/MANIFEST.MF          |  30 +-
 .../ide/eclipse/core/ExtendedServiceTracker.java   | 123 +++
 .../apache/sling/ide/eclipse/core/ServiceUtil.java |  30 -
 .../sling/ide/eclipse/core/internal/Activator.java | 109 +--
 .../core/internal/JVMDebuggerConnection.java       |   7 +-
 eclipse/eclipse-m2e-core/META-INF/MANIFEST.MF      |   2 +-
 eclipse/eclipse-m2e-test/META-INF/MANIFEST.MF      |   7 +-
 eclipse/eclipse-m2e-test/pom.xml                   |  20 -
 eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF        |  29 +-
 .../AbstractBundleProjectConfigurator.java         |  12 +-
 .../sling/ide/eclipse/m2e/internal/Activator.java  |  31 +-
 .../ContentPackageProjectConfigurator.java         |  31 +-
 .../MavenBundlePluginProjectConfigurator.java      |  13 -
 .../internal/SlingstartProjectConfigurator.java    |   7 +-
 ...bstractNewMavenBasedSlingApplicationWizard.java | 189 ++--
 .../wizards/np/ArchetypeParametersWizardPage.java  |  13 +-
 .../ui/wizards/np/ChooseArchetypeWizardPage.java   |  57 +-
 .../ide/eclipse/sightly/internal/Activator.java    |  12 +-
 eclipse/eclipse-sightly-ui/META-INF/MANIFEST.MF    |   2 +-
 eclipse/eclipse-test/META-INF/MANIFEST.MF          |   2 +-
 eclipse/eclipse-test/pom.xml                       |  71 +-
 .../org/apache/sling/ide/test/impl/Activator.java  |  46 +-
 .../sling/ide/test/impl/ContentDeploymentTest.java |   5 +-
 .../impl/ui/sightly/SightlyAutocompletionTest.java |  16 +-
 eclipse/eclipse-ui/META-INF/MANIFEST.MF            |  32 +-
 .../eclipse/ui/actions/JcrNodeFormatHandler.java   |  21 +-
 .../sling/ide/eclipse/ui/internal/Activator.java   |  55 +-
 .../ide/eclipse/ui/views/DateTimeSupport.java      |  19 +-
 eclipse/feature/feature.xml                        |   9 +-
 eclipse/p2update/pom.xml                           |   6 +-
 eclipse/pom.xml                                    |  40 +-
 eclipse/target-definition/README.md                |   7 +
 eclipse/target-definition/Sling IDE Tooling.launch | 952 ++++++++++++---------
 .../org.apache.sling.ide.target-definition.target  |  80 +-
 shared/{modules => }/.gitignore                    |   0
 .../META-INF => shared}/MANIFEST.MF                |   5 +-
 shared/{modules => }/api/.project                  |  10 -
 shared/{modules => }/api/README.md                 |   0
 shared/{modules => }/api/bnd.bnd                   |   0
 shared/{modules => }/api/pom.xml                   |   1 +
 .../java/org/apache/sling/ide/filter/Filter.java   |   0
 .../org/apache/sling/ide/filter/FilterLocator.java |   0
 .../org/apache/sling/ide/filter/FilterResult.java  |   0
 .../apache/sling/ide/filter/IgnoredResources.java  |   0
 .../org/apache/sling/ide/filter/package-info.java  |   0
 .../main/java/org/apache/sling/ide/log/Logger.java |   0
 .../org/apache/sling/ide/log/package-info.java     |   0
 .../sling/ide/osgi/MavenSourceReference.java       |   0
 .../java/org/apache/sling/ide/osgi/OsgiClient.java |   0
 .../apache/sling/ide/osgi/OsgiClientException.java |   0
 .../apache/sling/ide/osgi/OsgiClientFactory.java   |   0
 .../org/apache/sling/ide/osgi/SourceReference.java |   0
 .../apache/sling/ide/osgi/impl/HttpOsgiClient.java |   0
 .../sling/ide/osgi/impl/HttpOsgiClientFactory.java |   0
 .../ide/osgi/impl/MavenSourceReferenceImpl.java    |   0
 .../sling/ide/osgi/impl/TracingOsgiClient.java     |   0
 .../org/apache/sling/ide/osgi/package-info.java    |   0
 .../sling/ide/serialization/SerializationData.java |   0
 .../serialization/SerializationDataBuilder.java    |   0
 .../ide/serialization/SerializationException.java  |   0
 .../sling/ide/serialization/SerializationKind.java |   0
 .../serialization/SerializationKindManager.java    |   0
 .../ide/serialization/SerializationManager.java    |   0
 .../sling/ide/serialization/package-info.java      |   0
 .../ide/sync/content/NonExistingResources.java     |   0
 .../sling/ide/sync/content/SyncCommandFactory.java |   0
 .../sling/ide/sync/content/WorkspaceDirectory.java |   0
 .../sling/ide/sync/content/WorkspaceFile.java      |   0
 .../sling/ide/sync/content/WorkspacePath.java      |   0
 .../sling/ide/sync/content/WorkspacePaths.java     |   0
 .../sling/ide/sync/content/WorkspaceProject.java   |   0
 .../sling/ide/sync/content/WorkspaceResource.java  |   0
 .../content/impl/DefaultSyncCommandFactory.java    |   0
 .../sync/content/impl/NonExistingDirectory.java    |   0
 .../ide/sync/content/impl/NonExistingFile.java     |   0
 .../sling/ide/sync/content/package-info.java       |   0
 .../org/apache/sling/ide/transport/Batcher.java    |   0
 .../apache/sling/ide/transport/BatcherFactory.java |   0
 .../org/apache/sling/ide/transport/Command.java    |   0
 .../apache/sling/ide/transport/CommandContext.java |   0
 .../ide/transport/CommandExecutionProperties.java  |   0
 .../ide/transport/FallbackNodeTypeRegistry.java    |   0
 .../org/apache/sling/ide/transport/FileInfo.java   |   0
 .../sling/ide/transport/NodeTypeRegistry.java      |   0
 .../apache/sling/ide/transport/ProtectedNodes.java |   0
 .../org/apache/sling/ide/transport/Repository.java |   0
 .../sling/ide/transport/RepositoryException.java   |   0
 .../sling/ide/transport/RepositoryFactory.java     |   0
 .../apache/sling/ide/transport/RepositoryInfo.java |   0
 .../sling/ide/transport/RepositoryResponse.java    |   0
 .../sling/ide/transport/ResourceAndInfo.java       |   0
 .../apache/sling/ide/transport/ResourceProxy.java  |   0
 .../org/apache/sling/ide/transport/Result.java     |   0
 .../apache/sling/ide/transport/TracingCommand.java |   0
 .../sling/ide/transport/impl/DefaultBatcher.java   |   0
 .../ide/transport/impl/DefaultBatcherFactory.java  |   0
 .../apache/sling/ide/transport/package-info.java   |   0
 .../java/org/apache/sling/ide/util/PathUtil.java   |   0
 .../org/apache/sling/ide/util/package-info.java    |   0
 .../sling/ide/filter/IgnoredResourcesTest.java     |   0
 .../sling/ide/osgi/impl/HttpOsgiClientTest.java    |   0
 .../ide/serialization/NodeTypeResourceBuilder.java |   0
 .../SerializationKindManagerTest.java              |   0
 .../sling/ide/serialization/StubRepository.java    |   0
 .../sling/ide/sync/content/WorkspacePathTest.java  |   0
 .../sling/ide/sync/content/WorkspacePathsTest.java |   0
 .../transport/FallbackNodeTypeRegistryTest.java    |   0
 .../sling/ide/transport/ResourceProxyTest.java     |   0
 .../org/apache/sling/ide/util/PathUtilTest.java    |   0
 .../api/src/test/resources/bundles.json            |   0
 .../api/src/test/resources/sourceReferences.json   |   0
 shared/{modules => }/artifacts/.project            |  10 -
 shared/{modules => }/artifacts/README.md           |   0
 shared/{modules => }/artifacts/bnd.bnd             |   0
 shared/{modules => }/artifacts/pom.xml             |   0
 .../sling/ide/artifacts/EmbeddedArtifact.java      |   0
 .../ide/artifacts/EmbeddedArtifactLocator.java     |   0
 .../ide/artifacts/impl/ArtifactsLocatorImpl.java   |   0
 .../apache/sling/ide/artifacts/package-info.java   |   0
 .../{modules/api => filevault-uber-jar}/.project   |  14 +-
 shared/filevault-uber-jar/README.md                |   4 +
 shared/filevault-uber-jar/bnd.bnd                  |  57 ++
 shared/filevault-uber-jar/pom.xml                  | 126 +++
 shared/{modules => }/impl-resource/.project        |  10 -
 shared/{modules => }/impl-resource/README.md       |   0
 shared/{modules => }/impl-resource/bnd.bnd         |   0
 shared/{modules => }/impl-resource/pom.xml         |   0
 .../ide/impl/resource/filer/SimpleFilter.java      |   0
 .../impl/resource/filer/SimpleFilterLocator.java   |   0
 .../SimpleXmlSerializationManager.java             |   0
 .../impl/resource/transport/AbstractCommand.java   |   0
 .../impl/resource/transport/AbstractResult.java    |   0
 .../impl/resource/transport/DeleteNodeCommand.java |   0
 .../impl/resource/transport/GetNodeCommand.java    |   0
 .../resource/transport/GetNodeContentCommand.java  |   0
 .../resource/transport/ListChildrenCommand.java    |   0
 .../resource/transport/RepositoryFactoryImpl.java  |   0
 .../impl/resource/transport/RepositoryImpl.java    |   0
 .../resource/transport/UpdateContentCommand.java   |   0
 .../sling/ide/impl/resource/util/Constants.java    |   0
 .../SimpleXmlSerializationManagerTest.java         |   0
 ...lizationManagerTest.serializedDataIsEscaped.xml |   0
 ...rializationManagerTest.stringSerializedData.xml |   0
 shared/{modules => }/impl-vlt/.project             |  10 -
 shared/{modules => }/impl-vlt/README.md            |   0
 shared/{modules => }/impl-vlt/bnd.bnd              |   2 +-
 shared/{modules => }/impl-vlt/pom.xml              |  26 +-
 .../sling/ide/impl/vlt/AddOrUpdateNodeCommand.java |  14 +-
 .../apache/sling/ide/impl/vlt/ConversionUtils.java |   0
 .../sling/ide/impl/vlt/DeleteNodeCommand.java      |   0
 .../apache/sling/ide/impl/vlt/GetNodeCommand.java  |   0
 .../sling/ide/impl/vlt/GetNodeContentCommand.java  |   0
 .../org/apache/sling/ide/impl/vlt/JcrCommand.java  |   0
 .../org/apache/sling/ide/impl/vlt/JcrResult.java   |   8 +-
 .../sling/ide/impl/vlt/ListChildrenCommand.java    |   0
 .../apache/sling/ide/impl/vlt/ListTreeCommand.java |   0
 .../org/apache/sling/ide/impl/vlt/NoOpCommand.java |   0
 .../ide/impl/vlt/ReorderChildNodesCommand.java     |   2 +-
 .../apache/sling/ide/impl/vlt/VaultFsLocator.java  |   0
 .../sling/ide/impl/vlt/VaultFsLocatorImpl.java     |   0
 .../sling/ide/impl/vlt/VltNodeDefinition.java      |   0
 .../org/apache/sling/ide/impl/vlt/VltNodeType.java |   0
 .../sling/ide/impl/vlt/VltNodeTypeFactory.java     |   0
 .../sling/ide/impl/vlt/VltNodeTypeRegistry.java    |   0
 .../sling/ide/impl/vlt/VltPropertyDefinition.java  |   0
 .../apache/sling/ide/impl/vlt/VltRepository.java   |   0
 .../sling/ide/impl/vlt/VltRepositoryFactory.java   |   2 +-
 .../sling/ide/impl/vlt/filter/VltFilter.java       |   0
 .../ide/impl/vlt/filter/VltFilterLocator.java      |   0
 .../serialization/ResourceProxyParserHandler.java} | 176 ++--
 .../serialization/VltSerializationDataBuilder.java |   2 +-
 .../vlt/serialization/VltSerializationManager.java |  29 +-
 .../org/apache/sling/ide/jcr/RepositoryUtils.java  |   0
 .../org/apache/sling/ide/jcr/package-info.java     |   0
 .../ide/impl/vlt/AddOrUpdateNodeCommandTest.java   | 381 +++++++++
 .../ide/impl/vlt/ReorderChildNodesCommandTest.java |  15 +-
 .../sling/ide/impl/vlt/RepositoryManager.java      | 177 ++++
 .../org/apache/sling/ide/impl/vlt/Slf4jLogger.java |   0
 .../sling/ide/impl/vlt/filter/VltFilterTest.java   |   0
 .../ResourceProxyParserHandlerTest.java}           |  49 +-
 .../serialization/VltSerializationManagerTest.java |   0
 .../ide/impl/vlt/transport/DefaultBatcherTest.java |   0
 .../apache/sling/ide/jcr/RepositoryUtilsTest.java  |   1 -
 .../sling/ide/impl/vlt/filter/filter-deep.xml      |   0
 .../sling/ide/impl/vlt/filter/filter-default.xml   |   0
 .../ide/impl/vlt/filter/filter-with-include.xml    |   0
 .../org/apache/sling/ide/impl/vlt/folder.cnd       |   0
 .../sling/ide/impl/vlt/serialization/bin.binary    |   0
 .../ide/impl/vlt/serialization/binary-property.xml |   0
 .../serialization/empty-multivalued-property.xml   |   0
 .../vlt/serialization/encoded-child-content.xml    |   0
 .../escaped-braces-at-start-of-property.xml        |   0
 .../escaped-comma-in-multi-valued-property.xml     |   0
 .../serialization/escaped-value-in-property.xml    |   0
 .../sling/ide/impl/vlt/serialization/file.xml      |   0
 .../serialization/full-coverage-escaped-names.xml  |   0
 .../ide/impl/vlt/serialization/full-coverage.xml   |   0
 .../multivalued-properties-content.xml             |   0
 .../ide/impl/vlt/serialization/root-content.xml    |   0
 .../ide/impl/vlt/serialization/simple-content.xml  |   0
 ...gle-explicit-multivalued-properties-content.xml |   0
 .../apache/sling/ide/impl/vlt/test-definitions.cnd |   0
 shared/modules/impl-vlt/.options                   |   2 -
 shared/modules/impl-vlt/plugin.xml                 |  29 -
 .../ide/impl/vlt/AddOrUpdateNodeCommandTest.java   | 507 -----------
 shared/modules/parent/pom.xml                      | 178 ----
 shared/p2/pom.xml                                  | 170 ----
 shared/p2/shared-feature/build.properties          |   1 -
 shared/p2/shared-feature/feature.xml               | 256 ------
 shared/p2/shared-feature/pom.xml                   |  40 -
 shared/p2/shared-repository/category.xml           |  23 -
 shared/p2/shared-repository/pom.xml                |  40 -
 shared/p2/vlt-wrapper/META-INF/LICENSE             | 202 -----
 shared/p2/vlt-wrapper/META-INF/MANIFEST.MF         |  75 --
 shared/p2/vlt-wrapper/META-INF/NOTICE              |  11 -
 shared/p2/vlt-wrapper/README.md                    |   3 -
 shared/p2/vlt-wrapper/build.properties             |  18 -
 shared/p2/vlt-wrapper/lib/.gitignore               |   1 -
 shared/p2/vlt-wrapper/pom.xml                      | 179 ----
 shared/{modules => }/parent/.project               |   0
 shared/parent/pom.xml                              | 161 ++++
 shared/{modules => }/pom.xml                       |   7 +-
 shared/{modules => }/sync-fs/.project              |  10 -
 shared/{modules => }/sync-fs/bnd.bnd               |   0
 shared/{modules => }/sync-fs/pom.xml               |   3 +
 .../sling/ide/content/sync/fs/FSResources.java     |   0
 .../content/sync/fs/impl/FSWorkspaceDirectory.java |   0
 .../ide/content/sync/fs/impl/FSWorkspaceFile.java  |   0
 .../content/sync/fs/impl/FSWorkspaceProject.java   |   0
 .../content/sync/fs/impl/FSWorkspaceResource.java  |   0
 .../sling/ide/content/sync/fs/package-info.java    |   0
 .../sync/fs/impl/FSWorkspaceDirectoryTest.java     |   0
 .../content/sync/fs/impl/FSWorkspaceFileTest.java  |   0
 .../sync/fs/impl/FSWorkspaceProjectTest.java       |   0
 .../content/sync/fs/impl/MockFilterLocator.java    |   0
 241 files changed, 2146 insertions(+), 3037 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6cb7699a..8696b2d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ maven-eclipse.xml
 jcr.log
 atlassian-ide-plugin.xml
 derby.log
+bin
diff --git a/Jenkinsfile b/Jenkinsfile
index 8de6f298..6cb72587 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,7 +1,7 @@
 import org.apache.sling.jenkins.SlingJenkinsHelper;
 
 def mvnVersion = 'Maven 3.3.9'
-def javaVersion = 'JDK 1.8 (latest)'
+def javaVersion = 'JDK 17 (latest)'
 
 node('ubuntu') {
     def helper = new SlingJenkinsHelper()
@@ -20,7 +20,7 @@ def generateStages(String os, def mvnVersion, def javaVersion) {
         "[$prefix] Build shared code": {
             withMaven(maven: mvnVersion, jdk: javaVersion, options: [artifactsPublisher(disabled: true)]) {
                 timeout(10) {
-                    runCmd "mvn -f shared/modules clean install"
+                    runCmd "mvn -f shared clean install"
                 }
             }
         }, "[$prefix] Build CLI bundles": {
@@ -29,12 +29,6 @@ def generateStages(String os, def mvnVersion, def javaVersion) {
                     runCmd "mvn -f cli clean install"
                 }
             }
-        }, "[$prefix] Build shared code P2 repository": {
-            withMaven(maven: mvnVersion, jdk: javaVersion, options: [artifactsPublisher(disabled: true)]) {
-                timeout(10) {
-                    runCmd 'mvn -f shared/p2 clean package'
-                }
-            }
         }, "[$prefix] Build Eclipse plug-ins": {
             withMaven(maven: mvnVersion, jdk: javaVersion, options: [artifactsPublisher(disabled: true)]) {
                 timeout(20) {
diff --git a/README.md b/README.md
index c40a52be..7c75eeef 100644
--- a/README.md
+++ b/README.md
@@ -11,16 +11,18 @@ documentation page.
 
 ## Repository structure
 
-The modules are split into two sub-trees
+The modules are split into distinct sub-trees
 
 * shared
+* cli
 * eclipse
 
 to ensure that the reusable code is available for usage in other IDEs or
 environments.
 
 The modules placed under `shared/modules` should bring as few external dependencies as
-possible, and must not depend on IDE-specific APIs, such as Eclipse or OSGi.
+possible, and must not depend on IDE-specific APIs, such as Eclipse or OSGi. However,
+all modules come with OSGi bundle headers.
 
 The modules placed under `eclipse` may depend on any Eclipse-specific APIs.
 
@@ -34,7 +36,7 @@ This howto assumes that you are running Eclipse Oxygen or later with the Plug-In
 Development Environment and Maven features installed. You should have
 previously built the projects using
 
-    ./build-eclipse.sh
+    ./build.sh
 
 to ensure that Maven artifacts which are not available on p2 update sites are
 included in the workspace.
diff --git a/build.sh b/build.sh
index 69deda1e..89781d1f 100755
--- a/build.sh
+++ b/build.sh
@@ -1,10 +1,9 @@
 #!/bin/sh -e
 
 build_all()  {
-    mvn -f shared/modules clean install
-    mvn -f cli clean install
-    mvn -f shared/p2 clean package
-    mvn -f eclipse clean verify
+    mvn -f shared clean install -e
+#   mvn -f cli clean install -e
+    mvn -f eclipse clean verify -e
 
 }
 
@@ -13,12 +12,11 @@ build_all()  {
 if [ $# -eq 1 ]; then
     case "$1" in
         eclipse)
-            mvn -f shared/modules clean install
-            mvn -f shared/p2 clean package
+            mvn -f shared clean install
             mvn -f eclipse clean verify
             ;;
         cli)
-            mvn -f shared/modules clean install
+            mvn -f shared clean install
             mvn -f cli clean install
             ;;
         *)
diff --git a/cli/cli/pom.xml b/cli/cli/pom.xml
index f6b83c09..364e0a6b 100644
--- a/cli/cli/pom.xml
+++ b/cli/cli/pom.xml
@@ -16,10 +16,11 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sling</groupId>
-        <artifactId>sling</artifactId>
-        <version>33</version>
+        <artifactId>sling-bundle-parent</artifactId>
+        <version>49</version>
     </parent>
 
+	<groupId>org.apache.sling.ide</groupId>
     <artifactId>org.apache.sling.ide.cli</artifactId>
     <name>Apache Sling IDE Tools CLI</name>
     <version>1.2.3-SNAPSHOT</version>
@@ -30,15 +31,6 @@
         <url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
     </scm>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>biz.aQute.bnd</groupId>
-                <artifactId>bnd-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
     <dependencies>
         <dependency>
             <groupId>org.osgi</groupId>
@@ -75,6 +67,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.hamcrest</groupId>
@@ -100,8 +93,9 @@
             <scope>provided</scope>
         </dependency>
     </dependencies>
+
     <properties>
         <sling.java.version>8</sling.java.version>
     </properties>
-    <groupId>org.apache.sling.ide</groupId>
+    
 </project>
diff --git a/cli/pom.xml b/cli/pom.xml
index 46e7cfab..d261a82e 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache</groupId>
         <artifactId>apache</artifactId>
-        <version>14</version>
+        <version>27</version>
     </parent>
     <groupId>org.apache.sling.ide</groupId>
     <artifactId>sling-ide-tooling-cli</artifactId>
diff --git a/eclipse/eclipse-core/META-INF/MANIFEST.MF b/eclipse/eclipse-core/META-INF/MANIFEST.MF
index 706d51c3..9b09cd99 100644
--- a/eclipse/eclipse-core/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-core/META-INF/MANIFEST.MF
@@ -5,41 +5,30 @@ Bundle-Name: Sling IDE Eclipse Core
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-core;singleton:=true
 Bundle-Version: 1.2.3.qualifier
 Bundle-Activator: org.apache.sling.ide.eclipse.core.internal.Activator
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.equinox.ds;bundle-version="1.2.1",
- org.eclipse.osgi.services;bundle-version="3.2.100",
- org.eclipse.core.resources,
- org.eclipse.ui,
- org.eclipse.jdt.debug
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-ClassPath: .
-Import-Package: org.apache.commons.httpclient;version="3.1.0",
- org.apache.commons.httpclient.auth;version="3.1.0",
- org.apache.commons.httpclient.methods;version="3.1.0",
- org.apache.commons.httpclient.params;version="3.1.0",
- org.apache.commons.io;version="2.0.1",
- org.apache.sling.ide.artifacts,
+Import-Package: org.apache.sling.ide.artifacts,
  org.apache.sling.ide.filter,
  org.apache.sling.ide.log,
  org.apache.sling.ide.osgi,
  org.apache.sling.ide.serialization,
  org.apache.sling.ide.sync.content,
  org.apache.sling.ide.transport,
- org.apache.sling.ide.util,
  org.eclipse.core.commands,
  org.eclipse.core.commands.operations,
  org.eclipse.core.expressions,
  org.eclipse.core.resources,
+ org.eclipse.core.runtime;version="3.7.0",
+ org.eclipse.core.runtime.preferences;version="3.5.0",
  org.eclipse.debug.core,
  org.eclipse.debug.core.model,
  org.eclipse.debug.core.sourcelookup,
- org.eclipse.debug.core.sourcelookup.containers,
  org.eclipse.jdt.core,
  org.eclipse.jdt.internal.launching,
  org.eclipse.jdt.launching,
- org.eclipse.jdt.launching.sourcelookup.containers,
  org.eclipse.osgi.service.debug;version="1.2.0",
+ org.eclipse.osgi.util;version="1.1.0",
  org.eclipse.wst.common.project.facet.core,
  org.eclipse.wst.server.core,
  org.eclipse.wst.server.core.model,
@@ -49,7 +38,14 @@ Import-Package: org.apache.commons.httpclient;version="3.1.0",
  org.eclipse.wst.validation.internal.provisional.core,
  org.eclipse.wst.xml.core.internal.validation.core,
  org.eclipse.wst.xml.core.internal.validation.eclipse,
- org.osgi.service.component;version="1.1.0"
+ org.osgi.framework;version="1.10.0",
+ org.osgi.framework.dto;version="1.8.0",
+ org.osgi.service.component;version="1.1.0",
+ org.osgi.service.component.runtime;version="1.5.0",
+ org.osgi.service.component.runtime.dto;version="1.5.0",
+ org.osgi.service.event;version="1.4.1",
+ org.osgi.service.prefs;version="1.1.2",
+ org.osgi.util.tracker;version="1.5.3"
 Export-Package: org.apache.sling.ide.eclipse.core,
  org.apache.sling.ide.eclipse.core.facet,
  org.apache.sling.ide.eclipse.core.internal,
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ExtendedServiceTracker.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ExtendedServiceTracker.java
new file mode 100644
index 00000000..8daa4668
--- /dev/null
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ExtendedServiceTracker.java
@@ -0,0 +1,123 @@
+/*
+ * 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.ide.eclipse.core;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * Provides some capabilities to better trace issues with services provided by DS components in case the service cannot be retrieved.
+ *
+ * @param <T> the tracked service class
+ */
+public class ExtendedServiceTracker<T> implements AutoCloseable {
+	
+	private final Class<T> trackedClass;
+	
+	private final ServiceTracker<T,T> serviceTracker;
+	
+	private final ServiceTracker<ServiceComponentRuntime, ServiceComponentRuntime> scrServiceTracker;
+	
+	
+	public ExtendedServiceTracker(BundleContext bundleContext, Class<T> trackedClass) {
+		this.trackedClass = trackedClass;
+		serviceTracker = new ServiceTracker<T, T>(bundleContext, trackedClass, null);
+		serviceTracker.open();
+		scrServiceTracker = new ServiceTracker<ServiceComponentRuntime, ServiceComponentRuntime>(bundleContext, ServiceComponentRuntime.class, null);
+		scrServiceTracker.open();
+	}
+
+	public Optional<T> getOptional() {
+		return Optional.ofNullable(serviceTracker.getService());
+	}
+
+    public T getNotNull() {
+        T service = serviceTracker.getService();
+        if (service == null) {
+        	ServiceComponentRuntime scr = scrServiceTracker.getService();
+        	if (scr == null) {
+        		throw new IllegalStateException("Could not get service of type " + trackedClass + " and 'ServiceComponentRuntime' is not available either for further debugging hints");
+        	}
+        	List<ComponentDescriptionDTO> components = getComponentDescriptionDTOs(scr, trackedClass);
+        	if (components.isEmpty()) {
+        		throw new IllegalStateException("Could not get service of type " + trackedClass + ". The providing bundle is probably not properly installed or was not started as no DS component was found providing that service interface");
+        	} else {
+        	    // only dump the first found component
+        		throw new IllegalStateException("Could not get service of type " + trackedClass + ": Providing " + getRelevantComponentInfo(scr, components.get(0))); 
+        	}
+        }	
+        return service;
+    }
+
+    static List<ComponentDescriptionDTO> getComponentDescriptionDTOs(ServiceComponentRuntime scr, Class<?> serviceInterface) {
+    	return scr.getComponentDescriptionDTOs().stream().filter(c -> Arrays.asList(c.serviceInterfaces).contains(serviceInterface.getName())).collect(Collectors.toList());
+    }
+
+    
+    public String getRelevantComponentInfo(ServiceComponentRuntime scr, ComponentDescriptionDTO component) {
+    	StringBuilder info = new StringBuilder("DS Component ").append(component.name).append(" from bundle ").append(component.bundle.symbolicName);
+    	Collection<ComponentConfigurationDTO> componentConfigurations = scr.getComponentConfigurationDTOs(component);
+    	if (componentConfigurations.isEmpty()) {
+    		info.append(" is not available"); // why?
+    	} else {
+    		for (ComponentConfigurationDTO componentConfiguration : componentConfigurations) {
+    			info.append("has state ").append(getState(componentConfiguration));
+    		}
+    	}
+    	return info.toString();
+    }
+
+    static String getState(ComponentConfigurationDTO componentConfiguration) {
+    	String state;
+    	switch(componentConfiguration.state) {
+    	case ComponentConfigurationDTO.UNSATISFIED_CONFIGURATION:
+    		state = "Unsatisfied configuration";
+    		break;
+    	case ComponentConfigurationDTO.UNSATISFIED_REFERENCE:
+    		state = "Unsatisfied reference(s): " + String.join(", ", Arrays.asList(componentConfiguration.unsatisfiedReferences.toString()));
+    		break;
+    	case ComponentConfigurationDTO.SATISFIED:
+    		state = "Satisfied";
+    		break;
+    	case ComponentConfigurationDTO.ACTIVE:
+    		state = "Active";
+    		break;
+    	case ComponentConfigurationDTO.FAILED_ACTIVATION:
+    		state = "Activate method failed: " + componentConfiguration.failure;
+    		break;
+        default:
+        	state = "Unknown state: " + componentConfiguration.state;
+    	}
+    	return state;
+    }
+
+	@Override
+	public void close() throws Exception {
+		serviceTracker.close();
+		scrServiceTracker.close();
+	}
+    
+}
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServiceUtil.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServiceUtil.java
deleted file mode 100644
index 3e4252b5..00000000
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServiceUtil.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.ide.eclipse.core;
-
-import org.osgi.util.tracker.ServiceTracker;
-
-public class ServiceUtil {
-
-    public static <S, T> T getNotNull(ServiceTracker<S, T> serviceTracker) {
-        T service = serviceTracker.getService();
-        if (service == null)
-            throw new IllegalStateException("Service is null");
-
-        return service;
-    }
-}
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
index 05b809fa..aefa0deb 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
@@ -18,10 +18,12 @@ package org.apache.sling.ide.eclipse.core.internal;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 
 import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
+import org.apache.sling.ide.eclipse.core.ExtendedServiceTracker;
 import org.apache.sling.ide.eclipse.core.Preferences;
-import org.apache.sling.ide.eclipse.core.ServiceUtil;
 import org.apache.sling.ide.eclipse.core.launch.SourceReferenceResolver;
 import org.apache.sling.ide.filter.FilterLocator;
 import org.apache.sling.ide.log.Logger;
@@ -32,6 +34,7 @@ import org.apache.sling.ide.transport.BatcherFactory;
 import org.apache.sling.ide.transport.CommandExecutionProperties;
 import org.apache.sling.ide.transport.RepositoryFactory;
 import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
@@ -54,53 +57,55 @@ public class Activator extends Plugin {
 	private static Activator plugin;
 
     private ServiceTracker<EventAdmin, EventAdmin> eventAdmin;
-    private ServiceTracker<RepositoryFactory, RepositoryFactory> repositoryFactory;
-    private ServiceTracker<SerializationManager, SerializationManager> serializationManager;
-    private ServiceTracker<FilterLocator, FilterLocator> filterLocator;
-    private ServiceTracker<OsgiClientFactory, OsgiClientFactory> osgiClientFactory;
-    private ServiceTracker<EmbeddedArtifactLocator, EmbeddedArtifactLocator> artifactLocator;
-    private ServiceTracker<Logger, Logger> tracer;
-    private ServiceTracker<BatcherFactory, BatcherFactory> batcherFactoryLocator;
-    private ServiceTracker<SourceReferenceResolver, Object> sourceReferenceLocator;
-    private ServiceTracker<SyncCommandFactory, SyncCommandFactory> commandFactory;
+    private ExtendedServiceTracker<RepositoryFactory> repositoryFactory;
+    private ExtendedServiceTracker<SerializationManager> serializationManager;
+    private ExtendedServiceTracker<FilterLocator> filterLocator;
+    private ExtendedServiceTracker<OsgiClientFactory> osgiClientFactory;
+    private ExtendedServiceTracker<EmbeddedArtifactLocator> artifactLocator;
+    private ExtendedServiceTracker<Logger> tracer;
+    private ExtendedServiceTracker<BatcherFactory> batcherFactoryLocator;
+    private ExtendedServiceTracker<SourceReferenceResolver> sourceReferenceLocator;
+    private ExtendedServiceTracker<SyncCommandFactory> commandFactory;
     
     private Preferences preferences;
+    
+    public static final String BSN_VAULT_IMPL = "org.apache.sling.ide.impl-vlt";
+    public static final String BSN_API = "org.apache.sling.ide.api";
+    public static final String BSN_ARTIFACTS = "org.apache.sling.ide.artifacts";
 
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 		
+		// the following bundles need to be explicitly started as no class is directly referenced
+		// and everything works via declarative services
+		// compare with https://github.com/eclipse-m2e/m2e-core/issues/945
+		getFirstBundle(context, BSN_API).start();
+		getFirstBundle(context, BSN_VAULT_IMPL).start();
+		getFirstBundle(context, BSN_ARTIFACTS).start();
+		
         eventAdmin = new ServiceTracker<>(context, EventAdmin.class, null);
-        eventAdmin.open();
-
-        repositoryFactory = new ServiceTracker<>(context, RepositoryFactory.class,
-                null);
-        repositoryFactory.open();
-
-        serializationManager = new ServiceTracker<>(context, SerializationManager.class, null);
-        serializationManager.open();
-
-        filterLocator = new ServiceTracker<>(context, FilterLocator.class, null);
-        filterLocator.open();
-
-        osgiClientFactory = new ServiceTracker<>(context, OsgiClientFactory.class,
-                null);
-        osgiClientFactory.open();
-
-        artifactLocator = new ServiceTracker<>(context, EmbeddedArtifactLocator.class, null);
-        artifactLocator.open();
-
-        tracer = new ServiceTracker<>(context, Logger.class, null);
-        tracer.open();
-        
-        batcherFactoryLocator = new ServiceTracker<>(context, BatcherFactory.class, null);
-        batcherFactoryLocator.open();
-        
-        sourceReferenceLocator = new ServiceTracker<>(context, SourceReferenceResolver.class, null);
-        sourceReferenceLocator.open();
-        
-        commandFactory = new ServiceTracker<>(context, SyncCommandFactory.class, null);
-        commandFactory.open();
+        eventAdmin.open(true);
+
+        repositoryFactory = new ExtendedServiceTracker<>(context, RepositoryFactory.class);
+        serializationManager = new ExtendedServiceTracker<>(context, SerializationManager.class);
+        filterLocator = new ExtendedServiceTracker<>(context, FilterLocator.class);
+        osgiClientFactory = new ExtendedServiceTracker<>(context, OsgiClientFactory.class);
+        artifactLocator = new ExtendedServiceTracker<>(context, EmbeddedArtifactLocator.class);
+        tracer = new ExtendedServiceTracker<>(context, Logger.class);
+        batcherFactoryLocator = new ExtendedServiceTracker<>(context, BatcherFactory.class);
+        sourceReferenceLocator = new ExtendedServiceTracker<>(context, SourceReferenceResolver.class);
+        commandFactory = new ExtendedServiceTracker<>(context, SyncCommandFactory.class);
+	}
+
+	static Bundle getFirstBundle(BundleContext bundleContext, String bundleSymbolicName)
+	{
+		for (Bundle bundle : bundleContext.getBundles()) {
+			if (bundleSymbolicName.equals(bundle.getSymbolicName())) {
+				return bundle;
+			}
+		}
+		throw new IllegalStateException("Bundle with Bundle-SymbolicName '" + bundleSymbolicName + "' could not be found. Something went wrong during installation");
 	}
 
 	/*
@@ -133,37 +138,35 @@ public class Activator extends Plugin {
 	}
 
     public RepositoryFactory getRepositoryFactory() {
-
-        return ServiceUtil.getNotNull(repositoryFactory);
+        return repositoryFactory.getNotNull();
 	}
 
     public SerializationManager getSerializationManager() {
-        return ServiceUtil.getNotNull(serializationManager);
+        return serializationManager.getNotNull();
     }
 
     public FilterLocator getFilterLocator() {
-        return ServiceUtil.getNotNull(filterLocator);
+        return filterLocator.getNotNull();
     }
 
     public OsgiClientFactory getOsgiClientFactory() {
-        return ServiceUtil.getNotNull(osgiClientFactory);
+        return osgiClientFactory.getNotNull();
     }
 
     public EmbeddedArtifactLocator getArtifactLocator() {
-
-        return ServiceUtil.getNotNull(artifactLocator);
+        return artifactLocator.getNotNull();
     }
 
     public Logger getPluginLogger() {
-        return (Logger) ServiceUtil.getNotNull(tracer);
+        return tracer.getNotNull();
     }
     
     public BatcherFactory getBatcherFactory() {
-        return (BatcherFactory) ServiceUtil.getNotNull(batcherFactoryLocator);
+        return batcherFactoryLocator.getNotNull();
     }
     
     public SyncCommandFactory getCommandFactory() {
-        return ServiceUtil.getNotNull(commandFactory);
+        return commandFactory.getNotNull();
     }
     
     /**
@@ -182,14 +185,14 @@ public class Activator extends Plugin {
     }
     
     public EventAdmin getEventAdmin() {
-        return (EventAdmin) ServiceUtil.getNotNull(eventAdmin);
+        return Objects.requireNonNull(eventAdmin.getService(), "No OSGi EventAdmin service registered in the system");
     }
     
     /**
      * @return the source reference resolver, possibly null
      */
-    public SourceReferenceResolver getSourceReferenceResolver() {
-        return (SourceReferenceResolver) sourceReferenceLocator.getService();
+    public Optional<SourceReferenceResolver> getSourceReferenceResolver() {
+        return sourceReferenceLocator.getOptional();
     }
     
     public Preferences getPreferences() {
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/JVMDebuggerConnection.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/JVMDebuggerConnection.java
index fc25de27..7ccddd02 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/JVMDebuggerConnection.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/JVMDebuggerConnection.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.sling.ide.eclipse.core.ISlingLaunchpadConfiguration;
 import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
@@ -114,15 +115,15 @@ public class JVMDebuggerConnection {
         
         int workTicksForReferences = 24; // 30 - 5 - 1
         
-        SourceReferenceResolver resolver = Activator.getDefault().getSourceReferenceResolver();
-        if ( resolver != null  && configuration.resolveSourcesInDebugMode()) {
+        Optional<SourceReferenceResolver> resolver = Activator.getDefault().getSourceReferenceResolver();
+        if ( resolver.isPresent()  && configuration.resolveSourcesInDebugMode()) {
             try {
                 List<SourceReference> references = osgiClient.findSourceReferences();
                 SubMonitor subMonitor = SubMonitor.convert(monitor, "Resolving source references", workTicksForReferences).setWorkRemaining(references.size());
                 for ( SourceReference reference :  references ) {
                     try {
                         subMonitor.setTaskName("Resolving source reference: " + reference);
-                        IRuntimeClasspathEntry classpathEntry = resolver.resolve(reference);
+                        IRuntimeClasspathEntry classpathEntry = resolver.get().resolve(reference);
                         if ( classpathEntry != null ) {
                             classpathEntries.add(classpathEntry);
                         }
diff --git a/eclipse/eclipse-m2e-core/META-INF/MANIFEST.MF b/eclipse/eclipse-m2e-core/META-INF/MANIFEST.MF
index e05559e9..d7430dd1 100644
--- a/eclipse/eclipse-m2e-core/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-m2e-core/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@ Bundle-Name: Sling IDE M2E Core
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-m2e-core;singleton:=true
 Bundle-Version: 1.2.3.qualifier
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-ClassPath: .
 Import-Package: org.apache.sling.ide.eclipse.core.launch,
  org.apache.sling.ide.osgi,
diff --git a/eclipse/eclipse-m2e-test/META-INF/MANIFEST.MF b/eclipse/eclipse-m2e-test/META-INF/MANIFEST.MF
index ac91b918..7d81d23e 100644
--- a/eclipse/eclipse-m2e-test/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-m2e-test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: Sling IDE Tools: Eclipse M2Eclipse-based tests
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-m2e-test
 Bundle-Version: 1.2.3.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Require-Bundle: org.junit,
   org.eclipse.m2e.core,
   org.eclipse.m2e.launching,
@@ -11,15 +11,10 @@ Require-Bundle: org.junit,
   org.eclipse.m2e.core.ui,
   org.eclipse.m2e.discovery,
   org.eclipse.m2e.editor,
-  org.eclipse.m2e.editor.xml,
-  org.eclipse.m2e.maven.indexer,
   org.eclipse.m2e.archetype.common,
   org.eclipse.m2e.profiles.ui,
   org.eclipse.m2e.scm,
   org.eclipse.m2e.maven.runtime,
-  org.eclipse.m2e.lifecyclemapping.defaults,
-  org.eclipse.m2e.model.edit,
-  org.eclipse.m2e.maven.runtime.slf4j.simple,
   org.eclipse.m2e.refactoring,
   org.eclipse.m2e.profiles.core
 Fragment-Host: org.apache.sling.ide.eclipse-m2e-ui
diff --git a/eclipse/eclipse-m2e-test/pom.xml b/eclipse/eclipse-m2e-test/pom.xml
index 8b91d1a3..76f8c369 100644
--- a/eclipse/eclipse-m2e-test/pom.xml
+++ b/eclipse/eclipse-m2e-test/pom.xml
@@ -54,26 +54,6 @@
                 </archive>
             </configuration>
         </plugin>
-        <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-                <dependency-resolution>
-                    <extraRequirements>
-                        <requirement>
-                            <type>eclipse-plugin</type>
-                            <id>org.slf4j.binding.simple</id>
-                            <versionRange>0.0.0</versionRange>
-                        </requirement>
-                        <requirement>
-                            <type>eclipse-plugin</type>
-                            <id>org.slf4j.apis.log4j</id>
-                            <versionRange>0.0.0</versionRange>
-                        </requirement>
-                    </extraRequirements>
-                </dependency-resolution>
-            </configuration>
-        </plugin>        
     </plugins>
   </build>  
 </project>
diff --git a/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF b/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
index 6976b45b..cccd2fb1 100644
--- a/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
@@ -5,41 +5,28 @@ Bundle-Name: Sling IDE M2E UI
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-m2e-ui;singleton:=true
 Bundle-Activator: org.apache.sling.ide.eclipse.m2e.internal.Activator
 Bundle-Version: 1.2.3.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-ClassPath: .
 Require-Bundle: org.eclipse.m2e.core;bundle-version="1.4.0",
  org.eclipse.m2e.archetype.common;bundle-version="1.4.0",
  org.eclipse.m2e.maven.runtime;bundle-version="1.4.0",
  org.eclipse.jst.j2ee,
- org.eclipse.m2e.discovery;bundle-version="1.4.0"
-Import-Package: org.apache.commons.httpclient;version="3.1.0",
- org.apache.commons.httpclient.auth;version="3.1.0",
- org.apache.commons.httpclient.methods;version="3.1.0",
- org.apache.commons.httpclient.methods.multipart;version="3.1.0",
- org.apache.commons.httpclient.params;version="3.1.0",
- org.apache.commons.io;version="2.0.1",
- org.apache.commons.lang,
- org.apache.sling.ide.artifacts,
+ org.eclipse.m2e.discovery;bundle-version="1.4.0",
+ org.eclipse.m2e.core.ui;bundle-version="2.0.0",
+ org.apache.sling.ide.eclipse-core
+Import-Package: org.apache.sling.ide.artifacts,
  org.apache.sling.ide.eclipse.core,
  org.apache.sling.ide.eclipse.core.progress,
  org.apache.sling.ide.eclipse.ui,
  org.apache.sling.ide.eclipse.ui.wizards,
  org.apache.sling.ide.log,
  org.apache.sling.ide.osgi,
- org.apache.sling.ide.transport,
- org.eclipse.core.commands.common,
  org.eclipse.core.resources,
  org.eclipse.core.runtime;version="3.4.0",
- org.eclipse.core.runtime.jobs,
  org.eclipse.core.runtime.preferences;version="3.3.0",
- org.eclipse.debug.core,
- org.eclipse.debug.core.model,
- org.eclipse.debug.internal.ui,
  org.eclipse.jface.dialogs,
- org.eclipse.jface.layout,
  org.eclipse.jface.operation,
  org.eclipse.jface.preference,
- org.eclipse.jface.resource,
  org.eclipse.jface.util,
  org.eclipse.jface.viewers,
  org.eclipse.jface.wizard,
@@ -53,16 +40,12 @@ Import-Package: org.apache.commons.httpclient;version="3.1.0",
  org.eclipse.swt.layout,
  org.eclipse.swt.widgets,
  org.eclipse.ui,
- org.eclipse.ui.actions,
  org.eclipse.ui.browser,
- org.eclipse.ui.plugin,
  org.eclipse.ui.preferences,
- org.eclipse.ui.progress,
  org.eclipse.ui.statushandlers,
  org.eclipse.wst.common.frameworks.datamodel,
  org.eclipse.wst.common.project.facet.core,
  org.eclipse.wst.server.core,
- org.osgi.framework;version="1.6.0",
- org.osgi.util.tracker;version="1.5.0"
+ org.osgi.framework;version="1.8.0"
 Bundle-ActivationPolicy: lazy
 Export-Package: org.apache.sling.ide.eclipse.ui.wizards.np
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/AbstractBundleProjectConfigurator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/AbstractBundleProjectConfigurator.java
index 98afa72b..15a72428 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/AbstractBundleProjectConfigurator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/AbstractBundleProjectConfigurator.java
@@ -20,6 +20,7 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
 import org.apache.sling.ide.eclipse.core.ConfigurationHelper;
 import org.apache.sling.ide.log.Logger;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
@@ -45,12 +46,13 @@ public abstract class AbstractBundleProjectConfigurator extends AbstractProjectC
         
         // at this point the JDT project is already created by the tycho plugin
         // we just need to setup the appropriate facets
-        IProject project = configRequest.getProject();
+        IProject project = configRequest.mavenProjectFacade().getProject();
+        IFile pomFile = configRequest.mavenProjectFacade().getPom();
         trace("AbstractBundleProjectConfigurator called for POM {0} and project {1}",
-                configRequest.getPom().getFullPath(),
+        		pomFile.getFullPath(),
                 project.getName());
         // delete all previous markers on this pom.xml set by any project configurator
-        deleteMarkers(configRequest.getPom());
+        deleteMarkers(pomFile);
         
         if (!getPreferences().isBundleProjectConfiguratorEnabled()) {
             trace("m2e project configurator for bundles was disabled through preference.");
@@ -58,7 +60,7 @@ public abstract class AbstractBundleProjectConfigurator extends AbstractProjectC
         }
 
         // check for maven-sling-plugin as well (to make sure this is a Sling project)
-        MavenProject mavenProject = configRequest.getMavenProject();
+        MavenProject mavenProject = configRequest.mavenProject();
         if (mavenProject.getPlugin(MAVEN_SLING_PLUGIN_KEY) != null) {
             trace("Found maven-sling-plugin in build plugins for project {0}, therefore adding sling bundle facets!", project.getName());
             ConfigurationHelper.convertToBundleProject(project);
@@ -66,7 +68,7 @@ public abstract class AbstractBundleProjectConfigurator extends AbstractProjectC
             trace("Couldn't find maven-sling-plugin in build plugins for project {0}, therefore not adding the sling bundle facets!", project.getName());
         }
         if (!isSupportingM2eIncrementalBuild(mavenProject, getLogger())) {
-            markerManager.addMarker(configRequest.getPom(), MARKER_TYPE_BUNDLE_NOT_SUPPORTING_M2E,
+            markerManager.addMarker(pomFile, MARKER_TYPE_BUNDLE_NOT_SUPPORTING_M2E,
                     "Missing m2e incremental build support for generating the bundle manifest, component descriptions and metatype resources. Please use the provided Quick Fixes on this issue to resolve this.",
                     -1,
                     IMarker.SEVERITY_ERROR);
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
index b41cfa88..4ec13816 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
@@ -17,7 +17,6 @@
 package org.apache.sling.ide.eclipse.m2e.internal;
 
 import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
-import org.apache.sling.ide.eclipse.core.ServiceUtil;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.osgi.OsgiClientFactory;
 import org.eclipse.core.runtime.Plugin;
@@ -25,17 +24,12 @@ import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
 
 public class Activator extends Plugin {
 
     public static final String PLUGIN_ID = "org.apache.sling.ide.eclipse-m2e-ui";
     public static Activator INSTANCE;
 
-    private ServiceTracker<EmbeddedArtifactLocator, EmbeddedArtifactLocator> artifactLocator;
-    private ServiceTracker<OsgiClientFactory, OsgiClientFactory> osgiClientFactory;
-    private ServiceTracker<Logger, Logger> tracer;
-
     /**
      * Storage for preferences.
      */
@@ -50,42 +44,27 @@ public class Activator extends Plugin {
         super.start(context);
 
         INSTANCE = this;
-
-        artifactLocator = new ServiceTracker<>(context, EmbeddedArtifactLocator.class, null);
-        artifactLocator.open();
-
-        osgiClientFactory = new ServiceTracker<>(context, OsgiClientFactory.class,
-                null);
-        osgiClientFactory.open();
-
-        tracer = new ServiceTracker<>(context, Logger.class, null);
-        tracer.open();
     }
 
     @Override
     public void stop(BundleContext context) throws Exception {
         INSTANCE = null;
 
-        artifactLocator.close();
-        tracer.close();
-
         super.stop(context);
     }
 
-    public EmbeddedArtifactLocator getArtifactsLocator() {
-
-        return ServiceUtil.getNotNull(artifactLocator);
+    public EmbeddedArtifactLocator getArtifactLocator() {
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getArtifactLocator();
     }
 
     public OsgiClientFactory getOsgiClientFactory() {
-
-        return ServiceUtil.getNotNull(osgiClientFactory);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getOsgiClientFactory();
     }
 
     public Logger getPluginLogger() {
-        return ServiceUtil.getNotNull(tracer);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getPluginLogger();
     }
-
+    
     public IPreferenceStore getPreferenceStore() {
         // Create the preference store lazily.
         if (preferenceStore == null) {
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/ContentPackageProjectConfigurator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/ContentPackageProjectConfigurator.java
index 3e21b2c9..403ad59e 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/ContentPackageProjectConfigurator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/ContentPackageProjectConfigurator.java
@@ -25,7 +25,7 @@ import java.util.TreeSet;
 
 import org.apache.maven.project.MavenProject;
 import org.apache.sling.ide.eclipse.core.ConfigurationHelper;
-import org.eclipse.aether.util.StringUtils;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
@@ -68,16 +68,17 @@ public class ContentPackageProjectConfigurator extends AbstractProjectConfigurat
     @Override
     public void configure(ProjectConfigurationRequest configRequest, IProgressMonitor progressMonitor) throws CoreException {
 
-        IProject project = configRequest.getProject();
+        IProject project = configRequest.mavenProjectFacade().getProject();
+        IFile pomFile = configRequest.mavenProjectFacade().getPom();
         // delete all previous markers on this pom.xml set by any project configurator
-        deleteMarkers(configRequest.getPom());
+        deleteMarkers(pomFile);
 
         if (!getPreferences().isContentPackageProjectConfiguratorEnabled()) {
             trace("M2E project configurator for packing type 'content-package' was disabled through preference.");
             return;
         }
 
-        MavenProject mavenProject = configRequest.getMavenProject();
+        MavenProject mavenProject = configRequest.mavenProject();
         boolean active = !"false".equalsIgnoreCase(mavenProject.getProperties().getProperty(M2E_ACTIVE));
         if(!active) {
             trace("M2E project configurator for packing type 'content-package' was disabled with Maven property {0}", M2E_ACTIVE);
@@ -92,7 +93,7 @@ public class ContentPackageProjectConfigurator extends AbstractProjectConfigurat
             Optional<java.nio.file.Path> contentSyncPath = MavenProjectUtils.guessJcrRootFolder(mavenProject);
             if (!contentSyncPath.isPresent()) {
                 // add marker
-                addMarker(configRequest.getPom(), "Could not detect jcr_root path for this content package!", IMarker.SEVERITY_ERROR);
+                addMarker(pomFile, "Could not detect jcr_root path for this content package!", IMarker.SEVERITY_ERROR);
                 return;
             }
             
@@ -158,7 +159,7 @@ public class ContentPackageProjectConfigurator extends AbstractProjectConfigurat
         WtpProjectConfigurer(ProjectConfigurationRequest configRequest,
                IProject project, String jcrRootPath) {
 
-            this.configRequest = configRequest;
+           this.configRequest = configRequest;
            this.project = project;
            this.jcrRootPath = jcrRootPath;
        }
@@ -168,24 +169,26 @@ public class ContentPackageProjectConfigurator extends AbstractProjectConfigurat
            
            trace("Configuring content-package with WTP facets/natures");
            
-            addNatures(project, getDefaultWtpNatures(), progressMonitor, configRequest.getPom());
+            addNatures(project, getDefaultWtpNatures(), progressMonitor, configRequest.mavenProjectFacade().getPom());
            addWtpFacets(progressMonitor);
        }
 
        void addWtpFacets( IProgressMonitor progressMonitor) throws CoreException {
-           MavenProject mavenProject = configRequest.getMavenProject();
-           String javaFacetVersion;
-           if ( !StringUtils.isEmpty(mavenProject.getProperties().getProperty(M2E_JAVA_FACET_VERSION))) {
-               javaFacetVersion = mavenProject.getProperties().getProperty(M2E_JAVA_FACET_VERSION);
+           MavenProject mavenProject = configRequest.mavenProject();
+           final String javaFacetVersion;
+           String javaFacetVersionPropertyValue = mavenProject.getProperties().getProperty(M2E_JAVA_FACET_VERSION, "");
+           if (!javaFacetVersionPropertyValue.isBlank()) {
+               javaFacetVersion = javaFacetVersionPropertyValue;
                trace("Configured Java facet version {0} from pom property {1}", javaFacetVersion, M2E_JAVA_FACET_VERSION);
            } else {
                javaFacetVersion = JavaFacetUtil.getCompilerLevel(project);
                trace("Configured Java facet version {0} using JavaFacetUtil", javaFacetVersion);
            }
            
-           String webFacetVersion;
-           if ( !StringUtils.isEmpty(mavenProject.getProperties().getProperty(M2E_WEB_FACET_VERSION))) {
-               webFacetVersion = mavenProject.getProperties().getProperty(M2E_WEB_FACET_VERSION);
+           final String webFacetVersion;
+           String webFacetVersionPropertyValue = mavenProject.getProperties().getProperty(M2E_WEB_FACET_VERSION);
+           if (!webFacetVersionPropertyValue.isBlank()) {
+               webFacetVersion = webFacetVersionPropertyValue;
                trace("Configured Web facet version {0} from pom property {1}", webFacetVersion, M2E_WEB_FACET_VERSION);
            } else {
                webFacetVersion = MavenProjectUtils.guessServletApiVersion(mavenProject);
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenBundlePluginProjectConfigurator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenBundlePluginProjectConfigurator.java
index 317c50c1..a9e47c0f 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenBundlePluginProjectConfigurator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenBundlePluginProjectConfigurator.java
@@ -22,8 +22,6 @@ import org.apache.maven.model.PluginExecution;
 import org.apache.maven.project.MavenProject;
 import org.apache.sling.ide.log.Logger;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory;
-
 
 public class MavenBundlePluginProjectConfigurator extends AbstractBundleProjectConfigurator {
 
@@ -32,11 +30,6 @@ public class MavenBundlePluginProjectConfigurator extends AbstractBundleProjectC
      */
     private static final String MAVEN_BUNDLE_PLUGIN_KEY ="org.apache.felix:maven-bundle-plugin";
     
-    /**
-     * The configurator id used in <a href="https://github.com/tesla/m2eclipse-tycho/blob/master/org.sonatype.tycho.m2e/lifecycle-mapping-metadata.xml">m2e-tycho</a>.
-     * @see <a href="https://github.com/tesla/m2eclipse-tycho">m2eclipse-tycho Github</a>
-     */
-    private static final String M2E_TYCHO_EXTENSION_PROJECT_CONFIGURATOR_ID = "maven-bundle-plugin";
     
     public MavenBundlePluginProjectConfigurator() {
         super(false); // this configurator is only bound to goal "bundle" which is not supposed to be executed in
@@ -50,12 +43,6 @@ public class MavenBundlePluginProjectConfigurator extends AbstractBundleProjectC
             logger.warn("maven-bundle-plugin not configured!");
             return false;
         } else {
-            // check if m2elipse-tycho is already installed (which supports incremental builds for "bundle" packagings
-            if (LifecycleMappingFactory.createProjectConfigurator(M2E_TYCHO_EXTENSION_PROJECT_CONFIGURATOR_ID) != null) {
-                logger.trace("Project configurator with id '" + M2E_TYCHO_EXTENSION_PROJECT_CONFIGURATOR_ID + "' found -> m2e-tycho installed.");
-                return true;
-            }
-            
             String version = bundlePlugin.getVersion();
             if (version == null) {
                 logger.warn("Could not retrieve used version of maven-bundle-plugin!");
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java
index c73d6685..65b16c17 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java
@@ -32,8 +32,8 @@ public class SlingstartProjectConfigurator extends AbstractProjectConfigurator {
 	@Override
 	public void configure(ProjectConfigurationRequest request, IProgressMonitor monitor) throws CoreException {
 		
-		IProject project = request.getProject();
-		Set<String> candidates = MavenProjectUtils.getModelDirectoryCandidateLocations(request.getMavenProject());
+		IProject project = request.mavenProjectFacade().getProject();
+		Set<String> candidates = MavenProjectUtils.getModelDirectoryCandidateLocations(request.mavenProject());
 		IPath modelsPath = null; 
 		
 		for ( String candidate : candidates ) {
@@ -46,7 +46,6 @@ public class SlingstartProjectConfigurator extends AbstractProjectConfigurator {
 		}
 		
 		trace("Configuring project {0} with models path {1}", project.getName(), modelsPath);
-		
-		ConfigurationHelper.convertToLaunchpadProject(request.getProject(), modelsPath);
+		ConfigurationHelper.convertToLaunchpadProject(project, modelsPath);
 	}
 }
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/AbstractNewMavenBasedSlingApplicationWizard.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/AbstractNewMavenBasedSlingApplicationWizard.java
index a3e0d3e7..03a01430 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/AbstractNewMavenBasedSlingApplicationWizard.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/AbstractNewMavenBasedSlingApplicationWizard.java
@@ -18,6 +18,7 @@ package org.apache.sling.ide.eclipse.ui.wizards.np;
 
 import static org.apache.sling.ide.eclipse.core.progress.ProgressUtils.advance;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
 
@@ -34,7 +35,12 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.project.IArchetype;
+import org.eclipse.m2e.core.project.IMavenProjectImportResult;
+import org.eclipse.m2e.core.project.MavenProjectInfo;
 import org.eclipse.m2e.core.project.ProjectImportConfiguration;
+import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator;
+import org.eclipse.m2e.core.ui.internal.archetype.ArchetypePlugin;
 import org.eclipse.wst.server.core.IServer;
 
 public abstract class AbstractNewMavenBasedSlingApplicationWizard extends AbstractNewSlingApplicationWizard {
@@ -42,17 +48,17 @@ public abstract class AbstractNewMavenBasedSlingApplicationWizard extends Abstra
 	private ArchetypeParametersWizardPage archetypeParametersPage;
 
 	private static boolean isConfiguredWithBndPlugin(Model model) {
-	    for ( Plugin buildPlugin: model.getBuild().getPlugins() ) {
-	        if ( "biz.aQute.bnd".equals(buildPlugin.getGroupId())
-	                && "bnd-maven-plugin".equals(buildPlugin.getArtifactId()) ) {
-	            return true;
-	        }
-	    }
-	    
-        return false;
-    }
-	
-    public abstract boolean acceptsArchetype(Archetype archetype);
+		for (Plugin buildPlugin : model.getBuild().getPlugins()) {
+			if ("biz.aQute.bnd".equals(buildPlugin.getGroupId())
+					&& "bnd-maven-plugin".equals(buildPlugin.getArtifactId())) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	public abstract boolean acceptsArchetype(Archetype archetype);
 
 	/**
 	 * Constructor for AbstractNewMavenBasedSlingApplicationWizard.
@@ -62,25 +68,24 @@ public abstract class AbstractNewMavenBasedSlingApplicationWizard extends Abstra
 		setWindowTitle(doGetWindowTitle());
 		setNeedsProgressMonitor(true);
 	}
-	
-	
+
 	/**
 	 * Adding the page to the wizard.
 	 */
 	@Override
-    public void addPages() {
+	public void addPages() {
 		chooseArchetypePage = new ChooseArchetypeWizardPage(this);
 		addPage(chooseArchetypePage);
 		archetypeParametersPage = createArchetypeParametersWizardPage();
 		addPage(archetypeParametersPage);
-        addPage(getSetupServerWizardPage());
+		addPage(getSetupServerWizardPage());
 	}
-	
-    protected ArchetypeParametersWizardPage createArchetypeParametersWizardPage() {
-        return new ArchetypeParametersWizardPage(this);
-    }
-	
-    public ChooseArchetypeWizardPage getChooseArchetypePage() {
+
+	protected ArchetypeParametersWizardPage createArchetypeParametersWizardPage() {
+		return new ArchetypeParametersWizardPage(this);
+	}
+
+	public ChooseArchetypeWizardPage getChooseArchetypePage() {
 		return chooseArchetypePage;
 	}
 
@@ -88,13 +93,12 @@ public abstract class AbstractNewMavenBasedSlingApplicationWizard extends Abstra
     protected List<IProject> createProjects(IProgressMonitor monitor) throws CoreException {
 
         IPath location = chooseArchetypePage.getLocation();
-        Archetype archetype = chooseArchetypePage.getSelectedArchetype();
+        final Archetype archetype = chooseArchetypePage.getSelectedArchetype();
         String groupId = archetypeParametersPage.getGroupId();
         String artifactId = archetypeParametersPage.getArtifactId();
         String version = archetypeParametersPage.getVersion();
         String javaPackage = archetypeParametersPage.getJavaPackage();
         Properties properties = archetypeParametersPage.getProperties();
-        ProjectImportConfiguration configuration = new ProjectImportConfiguration();
 
         IProject existingProject = ResourcesPlugin.getWorkspace().getRoot().getProject(artifactId);
         if (existingProject!=null && existingProject.exists()) {
@@ -103,69 +107,92 @@ public abstract class AbstractNewMavenBasedSlingApplicationWizard extends Abstra
 
         advance(monitor, 1);
 
-        List<IProject> projects = MavenPlugin.getProjectConfigurationManager().createArchetypeProjects(location,
-                archetype, groupId, artifactId, version, javaPackage, properties, configuration,
+        // TODO: depends on https://github.com/eclipse-m2e/m2e-core/issues/921
+        IArchetype m2eArchetype = new IArchetype() {
+
+        	  @Override
+        	  public String getGroupId() {
+        	    return archetype.getGroupId();
+        	  }
+
+        	  @Override
+        	  public String getArtifactId() {
+        	    return archetype.getArtifactId();
+        	  }
+
+        	  @Override
+        	  public String getVersion() {
+        	    return archetype.getVersion();
+        	  }
+        };
+        // rely on internal API, until https://github.com/eclipse-m2e/m2e-core/issues/921 is solved
+    	ArchetypePlugin archetypeManager = M2EUIPluginActivator.getDefault().getArchetypePlugin();
+        Collection<MavenProjectInfo> projects = archetypeManager.getGenerator().createArchetypeProjects(location,
+        		m2eArchetype, groupId, artifactId, version, javaPackage, properties, false,
                 new NullProgressMonitor());
 
         monitor.worked(3);
 
-        return projects;
+        return MavenPlugin.getProjectConfigurationManager()
+                .importProjects(projects, new ProjectImportConfiguration(), null, monitor)
+                .stream().filter(r -> r.getProject() != null && r.getProject().exists())
+                .map(IMavenProjectImportResult::getProject).toList();
 
     }
 
-    @Override
-    protected Projects configureCreatedProjects(List<IProject> createdProjects, IProgressMonitor monitor)
-            throws CoreException {
-
-        Projects projects = new Projects();
-
-        for (IProject project : createdProjects) {
-            IFile pomFile = project.getFile("pom.xml");
-            if (!pomFile.exists()) {
-                // then ignore this project - we only deal with maven projects
-                continue;
-            }
-            final Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
-            final String packaging = model.getPackaging();
-
-            if ("content-package".equals(packaging)) {
-                projects.getContentProjects().add(project);
-            } else if ("bundle".equals(packaging) || isConfiguredWithBndPlugin(model)) {
-                projects.getBundleProjects().add(project);
-            } else if ("pom".equals(packaging)) {
-                if (projects.getReactorProject() == null) {
-                    projects.setReactorProject(project);
-                } else {
-                    IPath currLocation = project.getFullPath();
-                    IPath prevLocation = projects.getReactorProject().getFullPath();
-                    if (currLocation.isPrefixOf(prevLocation)) {
-                        // assume reactor is up in the folder structure
-                        projects.setReactorProject(project);
-                    }
-                }
-            }
-        }
-
-        advance(monitor, 1);
-
-        for (IProject contentProject : projects.getContentProjects()) {
-            configureContentProject(contentProject, createdProjects, monitor);
-        }
-        for (IProject bundleProject : projects.getBundleProjects()) {
-            configureBundleProject(bundleProject, createdProjects, monitor);
-        }
-
-        if (projects.getReactorProject() != null) {
-            configureReactorProject(projects.getReactorProject(), monitor);
-            advance(monitor, 1);
-        }
-
-        IServer server = getSetupServerWizardPage().getOrCreateServer(monitor);
-        advance(monitor, 1);
-
-        finishConfiguration(createdProjects, server, monitor);
-        advance(monitor, 1);
-
-        return projects;
-    }
+	@Override
+	protected Projects configureCreatedProjects(List<IProject> createdProjects, IProgressMonitor monitor)
+			throws CoreException {
+
+		Projects projects = new Projects();
+
+		for (IProject project : createdProjects) {
+			IFile pomFile = project.getFile("pom.xml");
+			if (!pomFile.exists()) {
+				// then ignore this project - we only deal with maven projects
+				continue;
+			}
+			final Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
+			final String packaging = model.getPackaging();
+
+			if ("content-package".equals(packaging)) {
+				projects.getContentProjects().add(project);
+			} else if ("bundle".equals(packaging) || isConfiguredWithBndPlugin(model)) {
+				projects.getBundleProjects().add(project);
+			} else if ("pom".equals(packaging)) {
+				if (projects.getReactorProject() == null) {
+					projects.setReactorProject(project);
+				} else {
+					IPath currLocation = project.getFullPath();
+					IPath prevLocation = projects.getReactorProject().getFullPath();
+					if (currLocation.isPrefixOf(prevLocation)) {
+						// assume reactor is up in the folder structure
+						projects.setReactorProject(project);
+					}
+				}
+			}
+		}
+
+		advance(monitor, 1);
+
+		for (IProject contentProject : projects.getContentProjects()) {
+			configureContentProject(contentProject, createdProjects, monitor);
+		}
+		for (IProject bundleProject : projects.getBundleProjects()) {
+			configureBundleProject(bundleProject, createdProjects, monitor);
+		}
+
+		if (projects.getReactorProject() != null) {
+			configureReactorProject(projects.getReactorProject(), monitor);
+			advance(monitor, 1);
+		}
+
+		IServer server = getSetupServerWizardPage().getOrCreateServer(monitor);
+		advance(monitor, 1);
+
+		finishConfiguration(createdProjects, server, monitor);
+		advance(monitor, 1);
+
+		return projects;
+	}
 }
\ No newline at end of file
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ArchetypeParametersWizardPage.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ArchetypeParametersWizardPage.java
index 1623515c..ab74636b 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ArchetypeParametersWizardPage.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ArchetypeParametersWizardPage.java
@@ -23,7 +23,6 @@ import java.util.StringTokenizer;
 
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.metadata.RequiredProperty;
-import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.jface.dialogs.IDialogPage;
@@ -39,8 +38,9 @@ import org.eclipse.jface.viewers.TableViewerEditor;
 import org.eclipse.jface.viewers.TableViewerFocusCellManager;
 import org.eclipse.jface.viewers.TextCellEditor;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.m2e.core.internal.MavenPluginActivator;
-import org.eclipse.m2e.core.internal.archetype.ArchetypeManager;
+import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator;
+import org.eclipse.m2e.core.ui.internal.archetype.ArchetypePlugin;
+import org.eclipse.m2e.core.ui.internal.archetype.MavenArchetype;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
@@ -270,9 +270,10 @@ public class ArchetypeParametersWizardPage extends WizardPage {
 		}
 		
         try {
-        	ArchetypeManager archetypeManager = MavenPluginActivator.getDefault().getArchetypeManager();
-        	ArtifactRepository remoteArchetypeRepository = archetypeManager.getArchetypeRepository(archetype);
-			properties = (List<RequiredProperty>) archetypeManager.getRequiredProperties(archetype, remoteArchetypeRepository, null);
+        	// rely on internal API, until https://github.com/eclipse-m2e/m2e-core/issues/921 is solved
+        	ArchetypePlugin archetypeManager = M2EUIPluginActivator.getDefault().getArchetypePlugin();
+        	MavenArchetype mavenArchetype = new MavenArchetype(archetype);
+			properties = (List<RequiredProperty>) archetypeManager.getRequiredProperties(mavenArchetype, null);
 			
 			Table table = propertiesViewer.getTable();
 			table.setItemCount(properties.size());
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ChooseArchetypeWizardPage.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ChooseArchetypeWizardPage.java
index 20f41b4e..31b996f3 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ChooseArchetypeWizardPage.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ChooseArchetypeWizardPage.java
@@ -34,16 +34,12 @@ import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.m2e.core.MavenPlugin;
-import org.eclipse.m2e.core.internal.MavenPluginActivator;
-import org.eclipse.m2e.core.internal.archetype.ArchetypeCatalogFactory;
-import org.eclipse.m2e.core.internal.archetype.ArchetypeManager;
-import org.eclipse.m2e.core.internal.index.IndexListener;
-import org.eclipse.m2e.core.repository.IRepository;
+import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator;
+import org.eclipse.m2e.core.ui.internal.archetype.ArchetypeCatalogFactory;
+import org.eclipse.m2e.core.ui.internal.archetype.ArchetypePlugin;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -61,7 +57,7 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 
 @SuppressWarnings("restriction")
-public class ChooseArchetypeWizardPage extends WizardPage implements IndexListener {
+public class ChooseArchetypeWizardPage extends WizardPage {
 	
     static final Comparator<String> ARTIFACT_KEY_COMPARATOR = new Comparator<String>() {
         @Override
@@ -209,15 +205,12 @@ public class ChooseArchetypeWizardPage extends WizardPage implements IndexListen
 		
 		setPageComplete(false);
 
-        MavenPlugin.getIndexManager().addIndexListener(this);
-
 		setControl(container);
 	}
 
     @Override
     public void dispose() {
 
-        MavenPlugin.getIndexManager().removeIndexListener(this);
         super.dispose();
     }
 
@@ -297,43 +290,6 @@ public class ChooseArchetypeWizardPage extends WizardPage implements IndexListen
 		}
 	}
 
-    @Override
-    public void indexAdded(IRepository repository) {
-
-    }
-
-    @Override
-    public void indexChanged(IRepository repository) {
-
-        Activator.getDefault().getPluginLogger()
-                .trace("Reloading archetypes as index for repository {0} has changed", repository);
-
-        try {
-            new RefreshArchetypesRunnable().run(new NullProgressMonitor());
-        } catch (final InvocationTargetException e) {
-            Display.getDefault().asyncExec(new Runnable() {
-                @Override
-                public void run() {
-                    if (isCurrentPage()) {
-                        setErrorMessage("Failed refreshing archetypes : " + e.getCause().getMessage());
-                    }
-                }
-            });
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-        }
-    }
-
-    @Override
-    public void indexRemoved(IRepository repository) {
-
-    }
-
-    @Override
-    public void indexUpdating(IRepository repository) {
-
-    }
-
     class RefreshArchetypesRunnable implements IRunnableWithProgress {
         @Override
         public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -341,10 +297,11 @@ public class ChooseArchetypeWizardPage extends WizardPage implements IndexListen
             Logger logger = Activator.getDefault().getPluginLogger();
 
             monitor.beginTask("Discovering archetypes...", 5);
-            ArchetypeManager manager = MavenPluginActivator.getDefault().getArchetypeManager();
+            // rely on internal API, until https://github.com/eclipse-m2e/m2e-core/issues/921 is solved
+        	ArchetypePlugin archetypeManager = M2EUIPluginActivator.getDefault().getArchetypePlugin();
             monitor.worked(1);
 
-            Collection<ArchetypeCatalogFactory> archetypeCatalogs = manager.getArchetypeCatalogs();
+            Collection<ArchetypeCatalogFactory> archetypeCatalogs = archetypeManager.getActiveArchetypeCatalogs();
             monitor.worked(2);
             ArrayList<Archetype> candidates = new ArrayList<>();
             for (ArchetypeCatalogFactory catalogFactory : archetypeCatalogs) {
diff --git a/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java b/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
index 74d8a79d..4ee47158 100644
--- a/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
+++ b/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
@@ -17,10 +17,8 @@
 package org.apache.sling.ide.eclipse.sightly.internal;
 
 import org.apache.sling.ide.log.Logger;
-import org.apache.sling.ide.eclipse.core.ServiceUtil;
 import org.eclipse.core.runtime.Plugin;
 import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
 
 public class Activator extends Plugin {
 
@@ -30,14 +28,9 @@ public class Activator extends Plugin {
     // The shared instance
     private static Activator plugin;
 
-    private ServiceTracker<Logger, Logger> loggerTracker;
-
 
     public void start(BundleContext context) throws Exception {
         
-        loggerTracker = new ServiceTracker<>(context, Logger.class, null);
-        loggerTracker.open();
-        
         super.start(context);
         plugin = this;
     }
@@ -50,8 +43,6 @@ public class Activator extends Plugin {
 
         plugin = null;
         
-        loggerTracker.close();
-        
         super.stop(context);
     }
 
@@ -65,8 +56,7 @@ public class Activator extends Plugin {
     }
     
     public Logger getLogger() {
-        
-        return ServiceUtil.getNotNull(loggerTracker);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getPluginLogger();
     }
 }
 
diff --git a/eclipse/eclipse-sightly-ui/META-INF/MANIFEST.MF b/eclipse/eclipse-sightly-ui/META-INF/MANIFEST.MF
index dc541400..80adde30 100644
--- a/eclipse/eclipse-sightly-ui/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-sightly-ui/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@ Bundle-Name: Sling IDE Eclipse Sightly UI
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-sightly-ui;singleton:=true
 Bundle-Version: 1.2.3.qualifier
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.jface,
diff --git a/eclipse/eclipse-test/META-INF/MANIFEST.MF b/eclipse/eclipse-test/META-INF/MANIFEST.MF
index 15aa3ffd..4a0b99a9 100644
--- a/eclipse/eclipse-test/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: Sling IDE Tools: Eclipse Tests
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-test
 Bundle-Version: 1.2.3.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Require-Bundle: org.junit,
  org.eclipse.core.runtime,
  org.eclipse.core.resources,
diff --git a/eclipse/eclipse-test/pom.xml b/eclipse/eclipse-test/pom.xml
index dce6376d..b6f2e072 100644
--- a/eclipse/eclipse-test/pom.xml
+++ b/eclipse/eclipse-test/pom.xml
@@ -42,16 +42,6 @@
                 <configuration>
                     <dependency-resolution>
                         <extraRequirements>
-                            <requirement>
-                                <type>eclipse-plugin</type>
-                                <id>org.eclipse.equinox.event</id>
-                                <versionRange>0.0.0</versionRange>
-                            </requirement>
-                            <requirement>
-                                <type>eclipse-plugin</type>
-                                <id>org.eclipse.equinox.ds</id>
-                                <versionRange>0.0.0</versionRange>
-                            </requirement>
                             <requirement>
                                 <type>eclipse-feature</type>
                                 <id>org.apache.sling.ide.feature</id>
@@ -62,16 +52,6 @@
                                 <id>org.apache.sling.ide.sightly-feature</id>
                                 <versionRange>0.0.0</versionRange>
                             </requirement>
-                            <requirement>
-                                <type>eclipse-plugin</type>
-                                <id>org.slf4j.binding.simple</id>
-                                <versionRange>0.0.0</versionRange>
-                            </requirement>
-                            <requirement>
-                                <type>eclipse-plugin</type>
-                                <id>org.slf4j.apis.log4j</id>
-                                <versionRange>0.0.0</versionRange>
-                            </requirement>
                         </extraRequirements>
                     </dependency-resolution>
                 </configuration>
@@ -83,7 +63,7 @@
                 <configuration>
                     <useUIHarness>true</useUIHarness>
                     <useUIThread>false</useUIThread>
-                    <argLine>-XX:MaxPermSize=512m ${ui.test.args}</argLine>
+                    <argLine>${ui.test.args}</argLine>
                     <systemProperties>
                         <launchpad.http.port>${http.port}</launchpad.http.port>
                         <org.slf4j.simpleLogger.showDateTime>true</org.slf4j.simpleLogger.showDateTime>
@@ -98,7 +78,7 @@
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.7</version>
+                <version>3.3.0</version>
                 <executions>
                     <execution>
                         <id>reserve-network-port</id>
@@ -114,37 +94,42 @@
                     </execution>
                 </executions>
             </plugin>
+            <!-- launch the Sling instances to test; only oak-tar -->
             <plugin>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>slingstart-maven-plugin</artifactId>
-                <version>1.8.2</version>
-                <extensions>true</extensions>
+                <artifactId>feature-launcher-maven-plugin</artifactId>
+                <version>0.1.2</version>
+                <configuration>
+                    <!-- newer versions don't work due to https://issues.apache.org/jira/browse/SLING-11158 -->
+                    <featureLauncherVersion>1.1.26</featureLauncherVersion>
+                    <launches>
+                        <launch>
+                            <id>sling-starter-oak-tar</id>
+                            <!-- launch the regular Starter distribution (based on Oak with Segment Node Store) -->
+                            <feature>
+                                <groupId>org.apache.sling</groupId>
+                                <artifactId>org.apache.sling.starter</artifactId>
+                                <version>12</version>
+                                <classifier>oak_tar</classifier>
+                                <type>slingosgifeature</type>
+                            </feature>
+                            <launcherArguments>
+                                <frameworkProperties>
+                                    <org.osgi.service.http.port>${http.port}</org.osgi.service.http.port>
+                                </frameworkProperties>
+                            </launcherArguments>
+                            <startTimeoutSeconds>${startTimeoutSeconds}</startTimeoutSeconds>
+                        </launch>
+                    </launches>
+                </configuration>
                 <executions>
                     <execution>
-                        <id>start-container</id>
                         <goals>
                             <goal>start</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>stop-container</id>
-                        <goals>
                             <goal>stop</goal>
                         </goals>
                     </execution>
                 </executions>
-                <configuration>
-                    <servers>
-                        <server>
-                            <port>${http.port}</port>
-                        </server>
-                    </servers>
-                    <launchpadDependency>
-                        <groupId>org.apache.sling</groupId>
-                        <artifactId>org.apache.sling.starter</artifactId>
-                        <version>11</version>
-                    </launchpadDependency>
-                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/Activator.java b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/Activator.java
index 60c983e6..3e809c84 100644
--- a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/Activator.java
+++ b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/Activator.java
@@ -17,53 +17,26 @@
 package org.apache.sling.ide.test.impl;
 
 import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
-import org.apache.sling.ide.eclipse.core.ServiceUtil;
 import org.apache.sling.ide.osgi.OsgiClientFactory;
 import org.apache.sling.ide.serialization.SerializationManager;
 import org.apache.sling.ide.sync.content.SyncCommandFactory;
 import org.eclipse.core.runtime.Plugin;
 import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
 
 public class Activator extends Plugin {
 
     private static Activator INSTANCE;
 
-    private ServiceTracker<EmbeddedArtifactLocator, EmbeddedArtifactLocator> artifactLocator;
-
-    private ServiceTracker<OsgiClientFactory, OsgiClientFactory> osgiClientFactory;
-
-    private ServiceTracker<SerializationManager, SerializationManager> serializationManager;
-
-    private ServiceTracker <SyncCommandFactory, SyncCommandFactory> commandFactory;
-
     @Override
     public void start(BundleContext context) throws Exception {
         super.start(context);
 
-        artifactLocator = new ServiceTracker<>(context, EmbeddedArtifactLocator.class, null);
-        artifactLocator.open();
-
-        osgiClientFactory = new ServiceTracker<>(context, OsgiClientFactory.class, null);
-        osgiClientFactory.open();
-
-        serializationManager = new ServiceTracker<>(context, SerializationManager.class, null);
-        serializationManager.open();
-        
-        commandFactory = new ServiceTracker<>(context, SyncCommandFactory.class, null);
-        commandFactory.open();
-
         INSTANCE = this;
     }
 
     @Override
     public void stop(BundleContext context) throws Exception {
 
-        artifactLocator.close();
-        osgiClientFactory.close();
-        serializationManager.close();
-        commandFactory.close();
-
         INSTANCE = null;
 
         super.stop(context);
@@ -73,22 +46,21 @@ public class Activator extends Plugin {
         return INSTANCE;
     }
 
-    public EmbeddedArtifactLocator getArtifactLocator() {
 
-        return ServiceUtil.getNotNull(artifactLocator);
+    public SerializationManager getSerializationManager() {
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getSerializationManager();
     }
 
-    public OsgiClientFactory getOsgiClientFactory() {
-
-        return ServiceUtil.getNotNull(osgiClientFactory);
+    public EmbeddedArtifactLocator getArtifactLocator() {
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getArtifactLocator();
     }
 
-    public SerializationManager getSerializationManager() {
-
-        return ServiceUtil.getNotNull(serializationManager);
+    public OsgiClientFactory getOsgiClientFactory() {
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getOsgiClientFactory();
     }
-
+    
     public SyncCommandFactory getCommandFactory() {
-        return ServiceUtil.getNotNull(commandFactory);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getCommandFactory();
     }
+
 }
diff --git a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ContentDeploymentTest.java b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ContentDeploymentTest.java
index 68832cc7..215d9952 100644
--- a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ContentDeploymentTest.java
+++ b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ContentDeploymentTest.java
@@ -27,6 +27,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.concurrent.Callable;
 
 import javax.jcr.Node;
@@ -157,7 +158,7 @@ public class ContentDeploymentTest {
         // create filter.xml
         project.createVltFilterWithRoots("/test");
         project.createOrUpdateFile(Path.fromPortableString("jcr_root/test/hello.txt"), new ByteArrayInputStream(
-                "hello, world".getBytes()));
+                "hello, world".getBytes(StandardCharsets.US_ASCII)));
 
         // verifications
         final RepositoryAccessor repo = new RepositoryAccessor(config);
@@ -167,7 +168,7 @@ public class ContentDeploymentTest {
         // change node type to sling:Folder
         InputStream contentXml = getClass().getResourceAsStream("sling-folder-nodetype.xml");
         project.createOrUpdateFile(Path.fromPortableString("jcr_root/test/.content.xml"), contentXml);
-
+     
         // verifications (2)
         assertThatNode(repo, poller, "/test",
                 allOf(hasPath("/test"), hasPrimaryType("sling:Folder"), hasChildrenCount(1)));
diff --git a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ui/sightly/SightlyAutocompletionTest.java b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ui/sightly/SightlyAutocompletionTest.java
index 60263e2a..151a838d 100644
--- a/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ui/sightly/SightlyAutocompletionTest.java
+++ b/eclipse/eclipse-test/src/org/apache/sling/ide/test/impl/ui/sightly/SightlyAutocompletionTest.java
@@ -35,6 +35,7 @@ import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
+import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
 import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
@@ -57,6 +58,8 @@ public class SightlyAutocompletionTest {
         if ( bot.activeView().getTitle().equals("Welcome") ) {
             bot.activeView().close();
         }
+        // to prevent issues due to missing keyboard layouts: https://wiki.eclipse.org/SWTBot/Keyboard_Layouts
+        SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
     }    
 
     @Test
@@ -149,12 +152,13 @@ public class SightlyAutocompletionTest {
             prepareEditor(editor);
 
             // gather proposals
-            List<String> proposals = editor.getAutoCompleteProposals("");
-            
-            // close editor, otherwise cleanup can hang due to the dialog
-            editor.saveAndClose();
-
-            return proposals;
+            try {
+            	List<String> proposals = editor.getAutoCompleteProposals("");
+            	return proposals;
+            } finally {
+            	// close editor, otherwise cleanup can hang due to the dialog
+                editor.saveAndClose();
+            }
         }
 
         /**
diff --git a/eclipse/eclipse-ui/META-INF/MANIFEST.MF b/eclipse/eclipse-ui/META-INF/MANIFEST.MF
index 4d5a6143..51b3b758 100644
--- a/eclipse/eclipse-ui/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-ui/META-INF/MANIFEST.MF
@@ -5,16 +5,11 @@ Bundle-Name: Sling IDE Eclipse UI
 Bundle-SymbolicName: org.apache.sling.ide.eclipse-ui;singleton:=true
 Bundle-Activator: org.apache.sling.ide.eclipse.ui.internal.Activator
 Bundle-Version: 1.2.3.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-ClassPath: .,
  lib/decentxml-1.4.jar
 Import-Package: javax.jcr,
  javax.jcr.nodetype,
- org.apache.commons.httpclient;version="3.1.0",
- org.apache.commons.httpclient.auth;version="3.1.0",
- org.apache.commons.httpclient.methods;version="3.1.0",
- org.apache.commons.httpclient.methods.multipart;version="3.1.0",
- org.apache.commons.httpclient.params;version="3.1.0",
  org.apache.commons.io;version="2.0.1",
  org.apache.jackrabbit.util,
  org.apache.jackrabbit.vault.fs.io;version="2.4.0",
@@ -27,36 +22,26 @@ Import-Package: javax.jcr,
  org.apache.sling.ide.serialization,
  org.apache.sling.ide.sync.content,
  org.apache.sling.ide.transport,
- org.apache.sling.ide.util,
  org.eclipse.core.commands,
- org.eclipse.core.commands.operations,
  org.eclipse.core.expressions,
  org.eclipse.core.resources,
  org.eclipse.core.resources.mapping,
  org.eclipse.core.runtime;version="3.4.0",
  org.eclipse.core.runtime.jobs,
  org.eclipse.debug.core,
- org.eclipse.debug.core.model,
  org.eclipse.debug.internal.ui,
- org.eclipse.debug.internal.ui.actions,
  org.eclipse.debug.ui,
  org.eclipse.debug.ui.sourcelookup,
  org.eclipse.jdt.core,
  org.eclipse.jdt.debug.ui.launchConfigurations,
- org.eclipse.jdt.internal.ui.javaeditor,
- org.eclipse.jdt.launching,
- org.eclipse.jdt.ui.actions,
  org.eclipse.jface.action,
  org.eclipse.jface.dialogs,
  org.eclipse.jface.operation,
  org.eclipse.jface.preference,
  org.eclipse.jface.resource,
- org.eclipse.jface.text,
  org.eclipse.jface.viewers,
  org.eclipse.jface.window,
  org.eclipse.jface.wizard,
- org.eclipse.jst.common.project.facet.core,
- org.eclipse.jst.server.core,
  org.eclipse.swt,
  org.eclipse.swt.events,
  org.eclipse.swt.layout,
@@ -66,34 +51,23 @@ Import-Package: javax.jcr,
  org.eclipse.ui.dialogs,
  org.eclipse.ui.forms,
  org.eclipse.ui.forms.widgets,
- org.eclipse.wst.common.project.facet.core,
  org.eclipse.wst.server.core,
- org.eclipse.wst.server.core.model,
- org.eclipse.wst.server.core.util,
  org.eclipse.wst.server.ui,
  org.eclipse.wst.server.ui.editor,
  org.eclipse.wst.server.ui.internal,
  org.eclipse.wst.server.ui.wizard,
  org.osgi.framework,
- org.osgi.service.component,
  org.osgi.service.event;version="1.3.0",
  org.osgi.util.tracker;version="1.5.0"
 Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.wst.common.project.facet.ui,
- org.eclipse.ui.navigator;bundle-version="3.5.101",
- org.eclipse.ui.views;bundle-version="3.6.0",
- org.eclipse.ui,
+Require-Bundle: org.eclipse.ui.navigator;bundle-version="3.5.101",
  org.eclipse.core.resources,
  org.eclipse.ui.ide,
  org.eclipse.core.runtime,
  org.eclipse.ui.console,
  org.eclipse.jdt.ui,
  org.apache.sling.ide.eclipse-core,
- org.eclipse.ui.views.properties.tabbed,
- org.eclipse.ui.workbench,
- org.eclipse.jface.text,
- org.eclipse.ui.editors,
- org.eclipse.swt
+ org.eclipse.ui.views.properties.tabbed
 Service-Component: OSGI-INF/*.xml
 Export-Package: org.apache.sling.ide.eclipse.ui,
  org.apache.sling.ide.eclipse.ui.browser,
diff --git a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeFormatHandler.java b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeFormatHandler.java
index 043c3242..36f20209 100644
--- a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeFormatHandler.java
+++ b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeFormatHandler.java
@@ -16,12 +16,9 @@
  */
 package org.apache.sling.ide.eclipse.ui.actions;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
 import org.apache.jackrabbit.vault.fs.io.DocViewFormat;
-import org.apache.jackrabbit.vault.util.xml.serialize.XMLSerializer;
 import org.apache.sling.ide.eclipse.ui.internal.Activator;
 import org.apache.sling.ide.eclipse.ui.internal.SelectionUtils;
 import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
@@ -38,10 +35,6 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.ui.handlers.HandlerUtil;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
 
 public class JcrNodeFormatHandler extends AbstractHandler {
     
@@ -66,15 +59,11 @@ public class JcrNodeFormatHandler extends AbstractHandler {
             @Override
             protected IStatus run(IProgressMonitor monitor) {
                 try {
-                    ByteArrayOutputStream out = new ByteArrayOutputStream();
-                    XMLSerializer serializer = new XMLSerializer(out, new DocViewFormat().getXmlOutputFormat());
-                    XMLReader reader = XMLReaderFactory.createXMLReader();
-                    reader.setContentHandler(serializer);
-                    reader.setDTDHandler(serializer);
-                    reader.parse(new InputSource(resource.getContents()));
-                    
-                    resource.setContents(new ByteArrayInputStream(out.toByteArray()), false, true, monitor);
-                } catch (SAXException | IOException | CoreException e) {
+                	DocViewFormat docViewFormat = new DocViewFormat();
+                	if (docViewFormat.format(resource.getFullPath().toFile(), true)) {
+                		resource.refreshLocal(0, monitor);
+                	}
+                } catch (IOException | CoreException e) {
                     return new Status(IStatus.ERROR, Activator.PLUGIN_ID, NLS.bind("Failed formatting {0}", resourcePath), e);
                 }
                 
diff --git a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
index 0fdec2dd..90f28033 100644
--- a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
+++ b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
@@ -18,7 +18,6 @@ package org.apache.sling.ide.eclipse.ui.internal;
 
 import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
 import org.apache.sling.ide.eclipse.core.Preferences;
-import org.apache.sling.ide.eclipse.core.ServiceUtil;
 import org.apache.sling.ide.filter.FilterLocator;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.osgi.OsgiClientFactory;
@@ -30,20 +29,11 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.event.EventAdmin;
-import org.osgi.util.tracker.ServiceTracker;
 
 public class Activator extends AbstractUIPlugin {
 
     public static final String PLUGIN_ID = "org.apache.sling.ide.eclipse-core";
     public static Activator INSTANCE;
-
-    private ServiceTracker<SerializationManager, SerializationManager> serializationManager;
-    private ServiceTracker<FilterLocator, FilterLocator> filterLocator;
-    private ServiceTracker<EventAdmin, EventAdmin> eventAdmin;
-    private ServiceTracker<EmbeddedArtifactLocator, EmbeddedArtifactLocator> artifactLocator;
-    private ServiceTracker<OsgiClientFactory, OsgiClientFactory> osgiClientFactory;
-    private ServiceTracker<Logger, Logger> tracer;
-    private ServiceTracker<SyncCommandFactory, SyncCommandFactory> commandFactory;
     
     private ScopedPreferenceStore preferenceStore;
     
@@ -58,73 +48,42 @@ public class Activator extends AbstractUIPlugin {
     public void start(BundleContext context) throws Exception {
         super.start(context);
 
-        serializationManager = new ServiceTracker<>(context, SerializationManager.class, null);
-        serializationManager.open();
-
-        filterLocator = new ServiceTracker<>(context, FilterLocator.class, null);
-        filterLocator.open();
-
-        eventAdmin = new ServiceTracker<>(context, EventAdmin.class, null);
-        eventAdmin.open();
-
-        artifactLocator = new ServiceTracker<>(context,
-                EmbeddedArtifactLocator.class, null);
-        artifactLocator.open();
-
-        osgiClientFactory = new ServiceTracker<>(context, OsgiClientFactory.class,
-                null);
-        osgiClientFactory.open();
-
-        tracer = new ServiceTracker<>(context, Logger.class, null);
-        tracer.open();
-        
-        commandFactory = new ServiceTracker<>(context, SyncCommandFactory.class, null);
-        commandFactory.open();        
-
         INSTANCE = this;
     }
 
     @Override
     public void stop(BundleContext context) throws Exception {
         INSTANCE = null;
-        serializationManager.close();
-        filterLocator.close();
-        eventAdmin.close();
-        artifactLocator.close();
-        osgiClientFactory.close();
-        commandFactory.close();
-        tracer.close();
 
         super.stop(context);
     }
 
     public SerializationManager getSerializationManager() {
-        return ServiceUtil.getNotNull(serializationManager);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getSerializationManager();
     }
 
     public FilterLocator getFilterLocator() {
-        return ServiceUtil.getNotNull(filterLocator);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getFilterLocator();
     }
 
     public EventAdmin getEventAdmin() {
-        return ServiceUtil.getNotNull(eventAdmin);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getEventAdmin();
     }
 
     public EmbeddedArtifactLocator getArtifactLocator() {
-
-        return ServiceUtil.getNotNull(artifactLocator);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getArtifactLocator();
     }
 
     public OsgiClientFactory getOsgiClientFactory() {
-        return ServiceUtil.getNotNull(osgiClientFactory);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getOsgiClientFactory();
     }
 
     public Logger getPluginLogger() {
-        return (Logger) ServiceUtil.getNotNull(tracer);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getPluginLogger();
     }
     
     public SyncCommandFactory getCommandFactory() {
-        return ServiceUtil.getNotNull(commandFactory);
+        return org.apache.sling.ide.eclipse.core.internal.Activator.getDefault().getCommandFactory();
     }
 
     @Override
diff --git a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/views/DateTimeSupport.java b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/views/DateTimeSupport.java
index ecda7c17..a236cc25 100644
--- a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/views/DateTimeSupport.java
+++ b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/views/DateTimeSupport.java
@@ -16,12 +16,17 @@
  */
 package org.apache.sling.ide.eclipse.ui.views;
 
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 
-import javax.xml.bind.DatatypeConverter;
+import org.apache.jackrabbit.util.ISO8601;
 
+/**
+ * Converts between {@link Calendar} and {@link String} according to 
+ * <a href="https://developer.adobe.com/experience-manager/reference-materials/spec/jcr/2.0/3_Repository_Model.html#3.6.4.3%20From%20DATE%20To">
+ * JCR Spec 2.0, Chapter 3.6.4</a>
+ *
+ */
 public class DateTimeSupport {
 
     public static Date parseAsDate(String vaultDateTime) {
@@ -29,7 +34,7 @@ public class DateTimeSupport {
     }
     
     public static Calendar parseAsCalendar(String vaultDateTime) {
-        final Calendar result = DatatypeConverter.parseDateTime(vaultDateTime);
+        final Calendar result = ISO8601.parse(vaultDateTime);
         return result;
     }
     
@@ -40,12 +45,6 @@ public class DateTimeSupport {
     }
     
     public static String print(Calendar c) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
-        String result = sdf.format(c.getTime());
-        SimpleDateFormat timezone = new SimpleDateFormat("Z");
-        String timezoneStr = timezone.format(c.getTime());
-        //make it ISO_8601 conform
-        timezoneStr = timezoneStr.substring(0, timezoneStr.length()-2) + ":" + timezoneStr.substring(timezoneStr.length()-2);
-        return result+timezoneStr;
+    	return ISO8601.format(c);
     }
 }
diff --git a/eclipse/feature/feature.xml b/eclipse/feature/feature.xml
index 675439b5..95dfd93d 100644
--- a/eclipse/feature/feature.xml
+++ b/eclipse/feature/feature.xml
@@ -254,7 +254,7 @@
          unpack="false"/>
 
    <plugin
-         id="org.apache.sling.ide.vlt-wrapper"
+         id="org.apache.sling.ide.filevault.uber-jar"
          download-size="0"
          install-size="0"
          version="0.0.0"
@@ -267,13 +267,6 @@
          version="0.0.0"
          unpack="false"/>
 
-   <plugin
-         id="org.apache.commons.collections"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
    <plugin
          id="org.apache.commons.httpclient"
          download-size="0"
diff --git a/eclipse/p2update/pom.xml b/eclipse/p2update/pom.xml
index 33194b57..da391a69 100644
--- a/eclipse/p2update/pom.xml
+++ b/eclipse/p2update/pom.xml
@@ -48,7 +48,7 @@
       <plugin>
         <groupId>org.jboss.tools.tycho-plugins</groupId>
         <artifactId>repository-utils</artifactId>
-        <version>0.22.0</version>
+        <version>2.7.5</version>
         <executions>
           <execution>
             <id>generate-facade</id>
@@ -68,8 +68,8 @@
       </plugin>
       <!-- the update site is not expected to contain legal artifacts -->
       <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>ianal-maven-plugin</artifactId>
+          <groupId>org.apache.geronimo.genesis.plugins</groupId>
+          <artifactId>tools-maven-plugin</artifactId>
           <configuration>
             <skip>true</skip>
           </configuration>
diff --git a/eclipse/pom.xml b/eclipse/pom.xml
index a345c357..83308e5f 100644
--- a/eclipse/pom.xml
+++ b/eclipse/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache</groupId>
         <artifactId>apache</artifactId>
-        <version>14</version>
+        <version>27</version>
     </parent>
     <groupId>org.apache.sling.ide</groupId>
     <artifactId>sling-ide-tooling</artifactId>
@@ -79,9 +79,9 @@
                 <version>${tycho.version}</version>
             </plugin>
             <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>ianal-maven-plugin</artifactId>
-                <version>1.0-alpha-1</version>
+                <groupId>org.apache.geronimo.genesis.plugins</groupId>
+                <artifactId>tools-maven-plugin</artifactId>
+                <version>1.4</version>
                 <executions>
                     <execution>
                         <goals>
@@ -120,6 +120,7 @@
 
                         <!-- Jenkins Xvfb plugin -->
                         <exclude>.Xauthority-*</exclude>
+                        <exclude>.*</exclude>
                     </excludes>
                 </configuration>
                 <executions>
@@ -134,15 +135,6 @@
         </plugins>
         <pluginManagement>
             <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.1</version>
-                    <configuration>
-                        <source>1.7</source>
-                        <target>1.7</target>
-                    </configuration>
-                </plugin>
                 <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
                 <!--
                     We embed some bundles that are not available on p2 update sites. To make the build seamless, we copy them early in the process.
@@ -181,26 +173,12 @@
         </pluginManagement>
     </build>
 
-    <pluginRepositories>
-        <pluginRepository>
-            <id>jboss-public-repository-group</id>
-            <name>JBoss Public Repository Group</name>
-            <url>https://repository.jboss.org/nexus/content/groups/public/</url>
-        </pluginRepository>
-    </pluginRepositories>
-
-  <repositories>
-   <repository>
-     <id>sling-ide-tooling-shared-local</id>
-     <layout>p2</layout>
-     <url>file:${basedir}/../../shared/p2/shared-repository/target/repository</url>
-   </repository>
-  </repositories>
-
-
     <properties>
-        <tycho.version>1.0.0</tycho.version>
+        <tycho.version>2.7.5</tycho.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <minimalJavaBuildVersion>17</minimalJavaBuildVersion>
+        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.release>17</maven.compiler.release>
     </properties>
 
     <profiles>
diff --git a/eclipse/target-definition/README.md b/eclipse/target-definition/README.md
new file mode 100644
index 00000000..504b2fe0
--- /dev/null
+++ b/eclipse/target-definition/README.md
@@ -0,0 +1,7 @@
+# Apache Sling IDE Tools Target
+
+The target definition for Eclipse PDE/Tycho against which to build the Eclipse plugins.
+
+The target file references both Eclipse Plugins/Features from P2 repositories (standard Eclipse dependencies) as well as [Maven artifacts](<https://xn--lubisoft-0za.gmbh/en/articles/using-maven-artifacts-in-pde-rcp-and-tycho-builds/>) for custom OSGi bundles.
+
+3rd party dependencies are referenced from [Eclipse Orbit](https://www.eclipse.org/orbit/) (to reuse bundle versions also used by other Eclipse plugins).
diff --git a/eclipse/target-definition/Sling IDE Tooling.launch b/eclipse/target-definition/Sling IDE Tooling.launch
index 94fb6ab7..1d2d4bfb 100644
--- a/eclipse/target-definition/Sling IDE Tooling.launch	
+++ b/eclipse/target-definition/Sling IDE Tooling.launch	
@@ -1,392 +1,566 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
-<setAttribute key="additional_plugins"/>
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<booleanAttribute key="clearws" value="true"/>
-<booleanAttribute key="clearwslog" value="true"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Sling IDE Tooling"/>
-<booleanAttribute key="default" value="true"/>
-<stringAttribute key="featureDefaultLocation" value="workspace"/>
-<stringAttribute key="featurePluginResolution" value="workspace"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="location" value="${workspace_loc}/../runtime-sling-ide-tooling"/>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -nosplash"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx768m&#10;-XX:MaxPermSize=256m"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<setAttribute key="selected_features"/>
-<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.ning.async-http-client@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.httpclient@default:defaul [...]
-<stringAttribute key="selected_workspace_plugins" value="org.apache.sling.ide.api@default:default,org.apache.sling.ide.artifacts@default:default,org.apache.sling.ide.eclipse-core@default:default,org.apache.sling.ide.eclipse-m2e-test@default:false,org.apache.sling.ide.eclipse-m2e-ui@default:default,org.apache.sling.ide.eclipse-ui@default:default,org.apache.sling.ide.impl-resource@default:default,org.apache.sling.ide.impl-vlt@default:default,org.apache.sling.ide.vlt-wrapper@default:default"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
-<booleanAttribute key="tracing" value="false"/>
-<mapAttribute key="tracingOptions">
-<mapEntry key="org.apache.sling.ide.eclipse-core/debug" value="true"/>
-<mapEntry key="org.apache.sling.ide.impl-resource/debug" value="true"/>
-<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
-<mapEntry key="org.eclipse.core.expressions/debug/TypeExtensionManager" value="false"/>
-<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
-<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/history" value="false"/>
-<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
-<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
-<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
-<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
-<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
-<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
-<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
-<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
-<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
-<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/breadcrumb" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/memory/dynamicLoading" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/breakpointDeltas" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/presentationId" value=""/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
-<mapEntry key="org.eclipse.e4.core.contexts/debug" value="false"/>
-<mapEntry key="org.eclipse.e4.core.contexts/debug/listeners" value="false"/>
-<mapEntry key="org.eclipse.e4.core.contexts/debug/names" value="false"/>
-<mapEntry key="org.eclipse.e4.core.di/debug" value="false"/>
-<mapEntry key="org.eclipse.e4.core.di/debug/injector" value="false"/>
-<mapEntry key="org.eclipse.e4.core.services/debug" value="false"/>
-<mapEntry key="org.eclipse.e4.core.services/debug/injector" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/debug" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/commands" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context.verbose" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/menus" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/renderer" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/workbench" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/debug" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/commands" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context.verbose" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/menus" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/renderer" value="false"/>
-<mapEntry key="org.eclipse.e4.ui.workbench/trace/workbench" value="false"/>
-<mapEntry key="org.eclipse.equinox.ds/debug" value="true"/>
-<mapEntry key="org.eclipse.equinox.ds/instantiate_all" value="true"/>
-<mapEntry key="org.eclipse.equinox.ds/performance" value="false"/>
-<mapEntry key="org.eclipse.equinox.ds/print_on_console" value="true"/>
-<mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/unsigned" value="false"/>
-<mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/untrusted" value="false"/>
-<mapEntry key="org.eclipse.equinox.p2.engine/engine/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.p2.engine/enginesession/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.p2.engine/profileregistry/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
-<mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/>
-<mapEntry key="org.eclipse.equinox.security/debug" value="false"/>
-<mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
-<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
-<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
-<mapEntry key="org.eclipse.help/debug" value="true"/>
-<mapEntry key="org.eclipse.help/debug/context" value="false"/>
-<mapEntry key="org.eclipse.help/debug/search" value="false"/>
-<mapEntry key="org.eclipse.help/debug/toc" value="false"/>
-<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/indexmanager/advanced" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
-<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
-<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
-<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
-<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
-<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
-<mapEntry key="org.eclipse.jdt.debug/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations" value="false"/>
-<mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations/callingThreads" value="false"/>
-<mapEntry key="org.eclipse.jdt.debug/debug/jdiEvents" value="false"/>
-<mapEntry key="org.eclipse.jdt.debug/debug/jdiRequestTimes" value="false"/>
-<mapEntry key="org.eclipse.jdt.launching/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.launching/debug/classpath/jreContainer" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/BreadcrumbItemDropDown" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
-<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
-<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
-<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
-<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
-<mapEntry key="org.eclipse.jface.text/assert/TextSelection/validConstructorArguments" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
-<mapEntry key="org.eclipse.osgi/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/objectPool/adds" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/objectPool/dups" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/cachedmanifest" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
-<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
-<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
-<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
-<mapEntry key="org.eclipse.team.core/debug" value="false"/>
-<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
-<mapEntry key="org.eclipse.team.core/streams" value="false"/>
-<mapEntry key="org.eclipse.team.core/threading" value="false"/>
-<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
-<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
-<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
-<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
-<mapEntry key="org.eclipse.ui.intro/debug/toolbar" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug/dnd" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug/resolution" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug/setup" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug/sort" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/debug/viewermap" value="false"/>
-<mapEntry key="org.eclipse.ui.navigator/perf/explorer/createPartControl" value="1300"/>
-<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
-<mapEntry key="org.eclipse.ui.workbench/debug/e4" value="false"/>
-<mapEntry key="org.eclipse.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
-<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
-<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
-<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
-<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
-<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
-<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
-<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/perspectives" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
-<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
-<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
-<mapEntry key="org.eclipse.wst.common.environment/trace/ws_framework" value="true"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project" value="false"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project/stacktrace" value="false"/>
-<mapEntry key="org.eclipse.wst.common.project.facet.ui/propPage/actionConfigValidation" value="false"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/config" value="false"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/finest" value="false"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/parsing" value="false"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/severe" value="false"/>
-<mapEntry key="org.eclipse.wst.internet.monitor.core/warning" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/config" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.server.core/extension_point" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/finer" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/finest" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/info" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/listeners" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/performance" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/publishing" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/resources" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/runtime_target" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/severe" value="false"/>
-<mapEntry key="org.eclipse.wst.server.core/warning" value="false"/>
-<mapEntry key="org.eclipse.wst.server.discovery/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/config" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/extension_point" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/finer" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/finest" value="false"/>
-<mapEntry key="org.eclipse.wst.server.ui/info" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/performance" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/severe" value="true"/>
-<mapEntry key="org.eclipse.wst.server.ui/warning" value="true"/>
-<mapEntry key="org.eclipse.wst.validation/debug" value="true"/>
-<mapEntry key="org.eclipse.wst.validation/extraValDetail" value=""/>
-<mapEntry key="org.eclipse.wst.validation/filter/allExcept" value=""/>
-<mapEntry key="org.eclipse.wst.validation/timings" value="false"/>
-<mapEntry key="org.eclipse.wst.validation/timings/tracefile" value=""/>
-<mapEntry key="org.eclipse.wst.validation/timings/useDoubles" value="false"/>
-<mapEntry key="org.eclipse.wst.validation/trace/level" value=""/>
-<mapEntry key="org.eclipse.wst.validation/v1" value="false"/>
-<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
-<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
-<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
-</mapAttribute>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useProduct" value="true"/>
+    <setAttribute key="additional_plugins"/>
+    <booleanAttribute key="append.args" value="true"/>
+    <booleanAttribute key="askclear" value="false"/>
+    <booleanAttribute key="automaticAdd" value="false"/>
+    <booleanAttribute key="automaticValidate" value="false"/>
+    <stringAttribute key="bootstrap" value=""/>
+    <stringAttribute key="checked" value="[NONE]"/>
+    <booleanAttribute key="clearConfig" value="false"/>
+    <booleanAttribute key="clearws" value="true"/>
+    <booleanAttribute key="clearwslog" value="true"/>
+    <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Sling IDE Tooling"/>
+    <booleanAttribute key="default" value="true"/>
+    <stringAttribute key="featureDefaultLocation" value="workspace"/>
+    <stringAttribute key="featurePluginResolution" value="workspace"/>
+    <booleanAttribute key="includeOptional" value="true"/>
+    <stringAttribute key="location" value="${workspace_loc}/../runtime-sling-ide-tooling"/>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
+    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
+    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
+    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -nosplash"/>
+    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx768m&#10;-XX:MaxPermSize=256m"/>
+    <stringAttribute key="pde.version" value="3.3"/>
+    <stringAttribute key="product" value="org.eclipse.platform.ide"/>
+    <setAttribute key="selected_features"/>
+    <setAttribute key="selected_target_bundles">
+        <setEntry value="com.ibm.icu@default:default"/>
+        <setEntry value="com.ning.async-http-client@default:default"/>
+        <setEntry value="javax.annotation@default:default"/>
+        <setEntry value="javax.inject@default:default"/>
+        <setEntry value="javax.servlet@default:default"/>
+        <setEntry value="javax.xml@default:default"/>
+        <setEntry value="org.apache.batik.css@default:default"/>
+        <setEntry value="org.apache.batik.util.gui@default:default"/>
+        <setEntry value="org.apache.batik.util@default:default"/>
+        <setEntry value="org.apache.commons.codec@default:default"/>
+        <setEntry value="org.apache.commons.collections@default:default"/>
+        <setEntry value="org.apache.commons.httpclient@default:default"/>
+        <setEntry value="org.apache.commons.io@default:default"/>
+        <setEntry value="org.apache.commons.logging*1.1.1.v201101211721@default:default"/>
+        <setEntry value="org.apache.lucene.analysis@default:default"/>
+        <setEntry value="org.apache.lucene.core@default:default"/>
+        <setEntry value="org.eclipse.ant.core@default:default"/>
+        <setEntry value="org.eclipse.compare.core@default:default"/>
+        <setEntry value="org.eclipse.compare@default:default"/>
+        <setEntry value="org.eclipse.core.commands@default:default"/>
+        <setEntry value="org.eclipse.core.contenttype@default:default"/>
+        <setEntry value="org.eclipse.core.databinding.observable@default:default"/>
+        <setEntry value="org.eclipse.core.databinding.property@default:default"/>
+        <setEntry value="org.eclipse.core.databinding@default:default"/>
+        <setEntry value="org.eclipse.core.expressions@default:default"/>
+        <setEntry value="org.eclipse.core.filebuffers@default:default"/>
+        <setEntry value="org.eclipse.core.filesystem.linux.x86_64@default:false"/>
+        <setEntry value="org.eclipse.core.filesystem@default:default"/>
+        <setEntry value="org.eclipse.core.jobs@default:default"/>
+        <setEntry value="org.eclipse.core.net.linux.x86_64@default:false"/>
+        <setEntry value="org.eclipse.core.net@default:default"/>
+        <setEntry value="org.eclipse.core.resources@default:default"/>
+        <setEntry value="org.eclipse.core.runtime.compatibility.registry@default:false"/>
+        <setEntry value="org.eclipse.core.runtime@default:true"/>
+        <setEntry value="org.eclipse.core.variables@default:default"/>
+        <setEntry value="org.eclipse.debug.core@default:default"/>
+        <setEntry value="org.eclipse.debug.ui@default:default"/>
+        <setEntry value="org.eclipse.e4.core.commands@default:default"/>
+        <setEntry value="org.eclipse.e4.core.contexts@default:default"/>
+        <setEntry value="org.eclipse.e4.core.di.extensions@default:default"/>
+        <setEntry value="org.eclipse.e4.core.di@default:default"/>
+        <setEntry value="org.eclipse.e4.core.services@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.bindings@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.css.core@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.css.swt.theme@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.css.swt@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.di@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.model.workbench@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.services@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.widgets@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.workbench.addons.swt@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.workbench.renderers.swt@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.workbench.swt@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.workbench3@default:default"/>
+        <setEntry value="org.eclipse.e4.ui.workbench@default:default"/>
+        <setEntry value="org.eclipse.emf.common@default:default"/>
+        <setEntry value="org.eclipse.emf.ecore.change@default:default"/>
+        <setEntry value="org.eclipse.emf.ecore.xmi@default:default"/>
+        <setEntry value="org.eclipse.emf.ecore@default:default"/>
+        <setEntry value="org.eclipse.equinox.app@default:default"/>
+        <setEntry value="org.eclipse.equinox.bidi@default:default"/>
+        <setEntry value="org.eclipse.equinox.common@2:true"/>
+        <setEntry value="org.eclipse.equinox.ds@1:true"/>
+        <setEntry value="org.eclipse.equinox.event@default:default"/>
+        <setEntry value="org.eclipse.equinox.frameworkadmin.equinox@default:default"/>
+        <setEntry value="org.eclipse.equinox.frameworkadmin@default:default"/>
+        <setEntry value="org.eclipse.equinox.http.jetty@default:default"/>
+        <setEntry value="org.eclipse.equinox.http.servlet@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.artifact.repository@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.core@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.director@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.engine@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.jarprocessor@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.metadata.repository@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.metadata@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.operations@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.publisher.eclipse@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.publisher@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.repository@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.ui@default:default"/>
+        <setEntry value="org.eclipse.equinox.p2.updatesite@default:default"/>
+        <setEntry value="org.eclipse.equinox.preferences@default:default"/>
+        <setEntry value="org.eclipse.equinox.registry@default:default"/>
+        <setEntry value="org.eclipse.equinox.security.ui@default:default"/>
+        <setEntry value="org.eclipse.equinox.security@default:default"/>
+        <setEntry value="org.eclipse.equinox.simpleconfigurator.manipulator@default:default"/>
+        <setEntry value="org.eclipse.equinox.simpleconfigurator@1:true"/>
+        <setEntry value="org.eclipse.equinox.util@default:default"/>
+        <setEntry value="org.eclipse.help.base@default:default"/>
+        <setEntry value="org.eclipse.help.ui@default:default"/>
+        <setEntry value="org.eclipse.help@default:default"/>
+        <setEntry value="org.eclipse.jdt.compiler.apt@default:false"/>
+        <setEntry value="org.eclipse.jdt.compiler.tool@default:false"/>
+        <setEntry value="org.eclipse.jdt.core.manipulation@default:default"/>
+        <setEntry value="org.eclipse.jdt.core@default:default"/>
+        <setEntry value="org.eclipse.jdt.debug.ui@default:default"/>
+        <setEntry value="org.eclipse.jdt.debug@default:default"/>
+        <setEntry value="org.eclipse.jdt.launching@default:default"/>
+        <setEntry value="org.eclipse.jdt.ui@default:default"/>
+        <setEntry value="org.eclipse.jetty.continuation@default:default"/>
+        <setEntry value="org.eclipse.jetty.http@default:default"/>
+        <setEntry value="org.eclipse.jetty.io@default:default"/>
+        <setEntry value="org.eclipse.jetty.security@default:default"/>
+        <setEntry value="org.eclipse.jetty.server@default:default"/>
+        <setEntry value="org.eclipse.jetty.servlet@default:default"/>
+        <setEntry value="org.eclipse.jetty.util@default:default"/>
+        <setEntry value="org.eclipse.jface.databinding@default:default"/>
+        <setEntry value="org.eclipse.jface.text@default:default"/>
+        <setEntry value="org.eclipse.jface@default:default"/>
+        <setEntry value="org.eclipse.jst.common.project.facet.core@default:default"/>
+        <setEntry value="org.eclipse.jst.server.core@default:default"/>
+        <setEntry value="org.eclipse.ltk.core.refactoring@default:default"/>
+        <setEntry value="org.eclipse.ltk.ui.refactoring@default:default"/>
+        <setEntry value="org.eclipse.m2e.archetype.common@default:default"/>
+        <setEntry value="org.eclipse.m2e.core@default:default"/>
+        <setEntry value="org.eclipse.m2e.maven.indexer@default:default"/>
+        <setEntry value="org.eclipse.m2e.maven.runtime@default:default"/>
+        <setEntry value="org.eclipse.osgi.services@default:default"/>
+        <setEntry value="org.eclipse.osgi@-1:true"/>
+        <setEntry value="org.eclipse.platform@default:default"/>
+        <setEntry value="org.eclipse.search@default:default"/>
+        <setEntry value="org.eclipse.swt.gtk.linux.x86_64@default:false"/>
+        <setEntry value="org.eclipse.swt@default:default"/>
+        <setEntry value="org.eclipse.team.core@default:default"/>
+        <setEntry value="org.eclipse.team.ui@default:default"/>
+        <setEntry value="org.eclipse.text@default:default"/>
+        <setEntry value="org.eclipse.ui.browser@default:default"/>
+        <setEntry value="org.eclipse.ui.cheatsheets@default:default"/>
+        <setEntry value="org.eclipse.ui.console@default:default"/>
+        <setEntry value="org.eclipse.ui.editors@default:default"/>
+        <setEntry value="org.eclipse.ui.forms@default:default"/>
+        <setEntry value="org.eclipse.ui.ide.application@default:default"/>
+        <setEntry value="org.eclipse.ui.ide@default:default"/>
+        <setEntry value="org.eclipse.ui.intro@default:default"/>
+        <setEntry value="org.eclipse.ui.navigator.resources@default:default"/>
+        <setEntry value="org.eclipse.ui.navigator@default:default"/>
+        <setEntry value="org.eclipse.ui.trace@default:default"/>
+        <setEntry value="org.eclipse.ui.views.properties.tabbed@default:default"/>
+        <setEntry value="org.eclipse.ui.views@default:default"/>
+        <setEntry value="org.eclipse.ui.workbench.texteditor@default:default"/>
+        <setEntry value="org.eclipse.ui.workbench@default:default"/>
+        <setEntry value="org.eclipse.ui@default:default"/>
+        <setEntry value="org.eclipse.wst.common.core@default:default"/>
+        <setEntry value="org.eclipse.wst.common.project.facet.core@default:default"/>
+        <setEntry value="org.eclipse.wst.common.project.facet.ui@default:default"/>
+        <setEntry value="org.eclipse.wst.internet.monitor.core@default:default"/>
+        <setEntry value="org.eclipse.wst.server.core@default:default"/>
+        <setEntry value="org.eclipse.wst.server.discovery@default:default"/>
+        <setEntry value="org.eclipse.wst.server.ui@default:default"/>
+        <setEntry value="org.hamcrest.core@default:default"/>
+        <setEntry value="org.jboss.netty@default:default"/>
+        <setEntry value="org.json@default:default"/>
+        <setEntry value="org.junit@default:default"/>
+        <setEntry value="org.sat4j.core@default:default"/>
+        <setEntry value="org.sat4j.pb@default:default"/>
+        <setEntry value="org.slf4j.api@default:default"/>
+        <setEntry value="org.w3c.css.sac@default:default"/>
+        <setEntry value="org.w3c.dom.smil@default:default"/>
+        <setEntry value="org.w3c.dom.svg@default:default"/>
+    </setAttribute>
+    <setAttribute key="selected_workspace_bundles">
+        <setEntry value="org.apache.sling.ide.api@default:default"/>
+        <setEntry value="org.apache.sling.ide.artifacts@default:default"/>
+        <setEntry value="org.apache.sling.ide.eclipse-core@default:default"/>
+        <setEntry value="org.apache.sling.ide.eclipse-m2e-test@default:false"/>
+        <setEntry value="org.apache.sling.ide.eclipse-m2e-ui@default:default"/>
+        <setEntry value="org.apache.sling.ide.eclipse-ui@default:default"/>
+        <setEntry value="org.apache.sling.ide.impl-resource@default:default"/>
+        <setEntry value="org.apache.sling.ide.impl-vlt@default:default"/>
+        <setEntry value="org.apache.sling.ide.vlt-wrapper@default:default"/>
+    </setAttribute>
+    <booleanAttribute key="show_selected_only" value="false"/>
+    <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+    <booleanAttribute key="tracing" value="false"/>
+    <mapAttribute key="tracingOptions">
+        <mapEntry key="org.apache.sling.ide.eclipse-core/debug" value="true"/>
+        <mapEntry key="org.apache.sling.ide.impl-resource/debug" value="true"/>
+        <mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+        <mapEntry key="org.eclipse.core.expressions/debug/TypeExtensionManager" value="false"/>
+        <mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+        <mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/history" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+        <mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+        <mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+        <mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+        <mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+        <mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+        <mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+        <mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+        <mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+        <mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/breadcrumb" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/memory/dynamicLoading" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/breakpointDeltas" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/presentationId" value=""/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+        <mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.contexts/debug" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.contexts/debug/listeners" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.contexts/debug/names" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.di/debug" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.di/debug/injector" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.services/debug" value="false"/>
+        <mapEntry key="org.eclipse.e4.core.services/debug/injector" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/debug" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/commands" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context.verbose" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/menus" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/renderer" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/workbench" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/debug" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/commands" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context.verbose" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/menus" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/renderer" value="false"/>
+        <mapEntry key="org.eclipse.e4.ui.workbench/trace/workbench" value="false"/>
+        <mapEntry key="org.eclipse.equinox.ds/debug" value="true"/>
+        <mapEntry key="org.eclipse.equinox.ds/instantiate_all" value="true"/>
+        <mapEntry key="org.eclipse.equinox.ds/performance" value="false"/>
+        <mapEntry key="org.eclipse.equinox.ds/print_on_console" value="true"/>
+        <mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/unsigned" value="false"/>
+        <mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/untrusted" value="false"/>
+        <mapEntry key="org.eclipse.equinox.p2.engine/engine/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.p2.engine/enginesession/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.p2.engine/profileregistry/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+        <mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+        <mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+        <mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+        <mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/>
+        <mapEntry key="org.eclipse.equinox.security/debug" value="false"/>
+        <mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/>
+        <mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+        <mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+        <mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+        <mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+        <mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+        <mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+        <mapEntry key="org.eclipse.help/debug" value="true"/>
+        <mapEntry key="org.eclipse.help/debug/context" value="false"/>
+        <mapEntry key="org.eclipse.help/debug/search" value="false"/>
+        <mapEntry key="org.eclipse.help/debug/toc" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+        <mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/indexmanager/advanced" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+        <mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+        <mapEntry key="org.eclipse.jdt.debug/debug" value="false"/>
+        <mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations" value="false"/>
+        <mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations/callingThreads" value="false"/>
+        <mapEntry key="org.eclipse.jdt.debug/debug/jdiEvents" value="false"/>
+        <mapEntry key="org.eclipse.jdt.debug/debug/jdiRequestTimes" value="false"/>
+        <mapEntry key="org.eclipse.jdt.launching/debug" value="false"/>
+        <mapEntry key="org.eclipse.jdt.launching/debug/classpath/jreContainer" value="false"/>
+        <mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+        <mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+        <mapEntry key="org.eclipse.jdt.ui/debug/BreadcrumbItemDropDown" value="false"/>
+        <mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+        <mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+        <mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+        <mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+        <mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+        <mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+        <mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+        <mapEntry key="org.eclipse.jface.text/assert/TextSelection/validConstructorArguments" value="false"/>
+        <mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/>
+        <mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+        <mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+        <mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+        <mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+        <mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+        <mapEntry key="org.eclipse.osgi/debug" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/objectPool/adds" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/objectPool/dups" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+        <mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+        <mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+        <mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+        <mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/cachedmanifest" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+        <mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+        <mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+        <mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+        <mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+        <mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+        <mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+        <mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+        <mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/>
+        <mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+        <mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+        <mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+        <mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+        <mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+        <mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+        <mapEntry key="org.eclipse.team.core/debug" value="false"/>
+        <mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+        <mapEntry key="org.eclipse.team.core/streams" value="false"/>
+        <mapEntry key="org.eclipse.team.core/threading" value="false"/>
+        <mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+        <mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+        <mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+        <mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+        <mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/>
+        <mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+        <mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+        <mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+        <mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+        <mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+        <mapEntry key="org.eclipse.ui.intro/debug/toolbar" value="false"/>
+        <mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+        <mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+        <mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+        <mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug/dnd" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug/resolution" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug/setup" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug/sort" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/debug/viewermap" value="false"/>
+        <mapEntry key="org.eclipse.ui.navigator/perf/explorer/createPartControl" value="1300"/>
+        <mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+        <mapEntry key="org.eclipse.ui.workbench/debug/e4" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/>
+        <mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+        <mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+        <mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+        <mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+        <mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+        <mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+        <mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+        <mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+        <mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+        <mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+        <mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+        <mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+        <mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+        <mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/perspectives" value="false"/>
+        <mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+        <mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.environment/trace/ws_framework" value="true"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.core/events/project" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.core/events/project/stacktrace" value="false"/>
+        <mapEntry key="org.eclipse.wst.common.project.facet.ui/propPage/actionConfigValidation" value="false"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/config" value="false"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/finest" value="false"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/parsing" value="false"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/severe" value="false"/>
+        <mapEntry key="org.eclipse.wst.internet.monitor.core/warning" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/config" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.core/extension_point" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/finer" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/finest" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/info" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/listeners" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/performance" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/publishing" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/resources" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/runtime_target" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/severe" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.core/warning" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.discovery/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/config" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/extension_point" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/finer" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/finest" value="false"/>
+        <mapEntry key="org.eclipse.wst.server.ui/info" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/performance" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/severe" value="true"/>
+        <mapEntry key="org.eclipse.wst.server.ui/warning" value="true"/>
+        <mapEntry key="org.eclipse.wst.validation/debug" value="true"/>
+        <mapEntry key="org.eclipse.wst.validation/extraValDetail" value=""/>
+        <mapEntry key="org.eclipse.wst.validation/filter/allExcept" value=""/>
+        <mapEntry key="org.eclipse.wst.validation/timings" value="false"/>
+        <mapEntry key="org.eclipse.wst.validation/timings/tracefile" value=""/>
+        <mapEntry key="org.eclipse.wst.validation/timings/useDoubles" value="false"/>
+        <mapEntry key="org.eclipse.wst.validation/trace/level" value=""/>
+        <mapEntry key="org.eclipse.wst.validation/v1" value="false"/>
+        <mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+        <mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+        <mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+    </mapAttribute>
+    <booleanAttribute key="useCustomFeatures" value="false"/>
+    <booleanAttribute key="useDefaultConfig" value="true"/>
+    <booleanAttribute key="useDefaultConfigArea" value="true"/>
+    <booleanAttribute key="useProduct" value="true"/>
 </launchConfiguration>
diff --git a/eclipse/target-definition/org.apache.sling.ide.target-definition.target b/eclipse/target-definition/org.apache.sling.ide.target-definition.target
index efb33dcd..579b7d0f 100644
--- a/eclipse/target-definition/org.apache.sling.ide.target-definition.target
+++ b/eclipse/target-definition/org.apache.sling.ide.target-definition.target
@@ -18,38 +18,58 @@
 <?pde version="3.8"?><target name="Sling IDE Tools" sequenceNumber="53">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.m2e.feature.feature.group" version="1.6.0.20150526-2032"/>
-<repository location="https://download.eclipse.org/technology/m2e/releases/1.6"/>
+	<repository location="https://download.eclipse.org/releases/2022-09/"/>
+	<unit id="org.eclipse.m2e.feature.feature.group" version="2.0.4.20220904-1703"/>
+	<unit id="org.eclipse.jst.web_ui.feature.feature.group" version="3.27.0.v202206160204"/>
+	<unit id="org.eclipse.jst.enterprise_ui.feature.feature.group" version="3.27.0.v202206160204"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="com.google.gson" version="2.2.4.v201311231704"/>
-<unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
-<unit id="org.apache.commons.httpclient" version="3.1.0.v201012070820"/>
-<unit id="org.apache.commons.io" version="2.2.0.v201405211200"/>
-<unit id="org.apache.commons.lang" version="2.6.0.v201404270220"/>
-<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
-<unit id="org.junit" version="4.12.0.v201504281640"/>
-<unit id="org.slf4j.api" version="1.7.10.v20170428-1633"/>
-<unit id="org.slf4j.binding.simple" version="1.7.10.v20160301-1109"/>
-<unit id="org.slf4j.apis.log4j" version="1.7.10.v20160208-0839"/>
-<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20170516192513/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.jst.enterprise_ui.feature.feature.group" version="3.9.2.v201802121827"/>
-<unit id="org.eclipse.jst.server_adapters.feature.feature.group" version="3.2.400.v201711301708"/>
-<unit id="org.eclipse.jst.server_ui.feature.feature.group" version="3.4.300.v201709251835"/>
-<unit id="org.eclipse.jst.web_ui.feature.feature.group" version="3.9.0.v201802152012"/>
-<unit id="org.eclipse.platform.feature.group" version="4.7.3.v20180301-0715"/>
-<unit id="org.eclipse.wst.server_adapters.feature.feature.group" version="3.2.601.v201711302104"/>
-<unit id="org.eclipse.wst.web_ui.feature.feature.group" version="3.9.2.v201801171858"/>
-<unit id="org.eclipse.wst.xml_ui.feature.feature.group" version="3.9.2.v201801171858"/>
-<repository location="https://download.eclipse.org/releases/oxygen/"/>
-</location>
+			<repository location="https://download.eclipse.org/eclipse/updates/4.25/"/><!--Keep in sync with repo-ref in org.eclipse.m2e.repository/category.xml-->
+			<unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
+			<unit id="org.eclipse.equinox.p2.discovery.feature.feature.group" version="0.0.0"/>
+			<unit id="org.eclipse.ui.tests.harness" version="0.0.0"/>
+			<unit id="org.mockito.mockito-core" version="0.0.0"/>
+			<unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
+		</location>
+		<!-- need new version due to https://bugs.eclipse.org/bugs/show_bug.cgi?id=580708 -->
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.swtbot.eclipse.feature.group" version="2.4.0.201604200752"/>
-<unit id="org.eclipse.swtbot.eclipse.test.junit.feature.group" version="2.4.0.201604200752"/>
-<unit id="org.eclipse.swtbot.feature.group" version="2.4.0.201604200752"/>
-<repository location="https://download.eclipse.org/technology/swtbot/releases/2.4.0/"/>
+	<unit id="org.eclipse.swtbot.eclipse.feature.group" version="4.1.0.202209231935"/>
+	<repository location="https://download.eclipse.org/technology/swtbot/snapshots/"/>
 </location>
+	<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+		<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20180606145124/repository"/>
+		<unit id="org.apache.commons.httpclient" version="3.1.0.v201012070820"/>
+		<unit id="com.google.gson" version="2.8.2.v20180104-1110"/>
+		<unit id="org.apache.commons.io" version="2.2.0.v201405211200"/>
+	</location>
+	<location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven">
+		<dependencies>
+			<dependency>
+				<groupId>org.apache.sling.ide</groupId>
+				<artifactId>org.apache.sling.ide.api</artifactId>
+				<version>1.2.3-SNAPSHOT</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.sling.ide</groupId>
+				<artifactId>org.apache.sling.ide.artifacts</artifactId>
+				<version>1.2.3-SNAPSHOT</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.sling.ide</groupId>
+				<artifactId>org.apache.sling.ide.filevault.uber-jar</artifactId>
+				<version>1.2.3-SNAPSHOT</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.sling.ide</groupId>
+				<artifactId>org.apache.sling.ide.impl-vlt</artifactId>
+				<version>1.2.3-SNAPSHOT</version>
+				<type>jar</type>
+			</dependency>
+		</dependencies>
+	</location>
 </locations>
-</target>
+	<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+</target>
\ No newline at end of file
diff --git a/shared/modules/.gitignore b/shared/.gitignore
similarity index 100%
rename from shared/modules/.gitignore
rename to shared/.gitignore
diff --git a/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF b/shared/MANIFEST.MF
similarity index 93%
rename from eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF
rename to shared/MANIFEST.MF
index 6a61580b..22afcc53 100644
--- a/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF
+++ b/shared/MANIFEST.MF
@@ -6,11 +6,12 @@ Bundle-SymbolicName: org.apache.sling.ide.eclipse-sightly-core;singleton:=true
 Bundle-Version: 1.2.3.qualifier
 Bundle-Activator: org.apache.sling.ide.eclipse.sightly.internal.Activator
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-17
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.swt,
- org.eclipse.osgi
+ org.eclipse.osgi,
+ org.apache.sling.ide.eclipse-core
 Import-Package: org.apache.sling.ide.eclipse.core,
  org.apache.sling.ide.eclipse.core.facet,
  org.apache.sling.ide.log,
diff --git a/shared/modules/api/.project b/shared/api/.project
similarity index 72%
copy from shared/modules/api/.project
copy to shared/api/.project
index 53aa37e3..6b308a64 100644
--- a/shared/modules/api/.project
+++ b/shared/api/.project
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
diff --git a/shared/modules/api/README.md b/shared/api/README.md
similarity index 100%
rename from shared/modules/api/README.md
rename to shared/api/README.md
diff --git a/shared/modules/api/bnd.bnd b/shared/api/bnd.bnd
similarity index 100%
rename from shared/modules/api/bnd.bnd
rename to shared/api/bnd.bnd
diff --git a/shared/modules/api/pom.xml b/shared/api/pom.xml
similarity index 98%
rename from shared/modules/api/pom.xml
rename to shared/api/pom.xml
index b82481c7..d50cdef2 100644
--- a/shared/modules/api/pom.xml
+++ b/shared/api/pom.xml
@@ -45,6 +45,7 @@
             <artifactId>jcr</artifactId>
             <scope>provided</scope>
         </dependency>
+        <!-- TODO: update 3rd party dependencies -->
         <dependency>
             <groupId>commons-httpclient</groupId>
             <artifactId>commons-httpclient</artifactId>
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/filter/Filter.java b/shared/api/src/main/java/org/apache/sling/ide/filter/Filter.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/filter/Filter.java
rename to shared/api/src/main/java/org/apache/sling/ide/filter/Filter.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/filter/FilterLocator.java b/shared/api/src/main/java/org/apache/sling/ide/filter/FilterLocator.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/filter/FilterLocator.java
rename to shared/api/src/main/java/org/apache/sling/ide/filter/FilterLocator.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/filter/FilterResult.java b/shared/api/src/main/java/org/apache/sling/ide/filter/FilterResult.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/filter/FilterResult.java
rename to shared/api/src/main/java/org/apache/sling/ide/filter/FilterResult.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/filter/IgnoredResources.java b/shared/api/src/main/java/org/apache/sling/ide/filter/IgnoredResources.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/filter/IgnoredResources.java
rename to shared/api/src/main/java/org/apache/sling/ide/filter/IgnoredResources.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/filter/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/filter/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/filter/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/filter/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/log/Logger.java b/shared/api/src/main/java/org/apache/sling/ide/log/Logger.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/log/Logger.java
rename to shared/api/src/main/java/org/apache/sling/ide/log/Logger.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/log/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/log/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/log/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/log/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/MavenSourceReference.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/MavenSourceReference.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/MavenSourceReference.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/MavenSourceReference.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientException.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientException.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientException.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientException.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientFactory.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClientFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/SourceReference.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/SourceReference.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/SourceReference.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/SourceReference.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientFactory.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/MavenSourceReferenceImpl.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/MavenSourceReferenceImpl.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/MavenSourceReferenceImpl.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/impl/MavenSourceReferenceImpl.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/TracingOsgiClient.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/TracingOsgiClient.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/impl/TracingOsgiClient.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/impl/TracingOsgiClient.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/osgi/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/osgi/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/osgi/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationData.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationData.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationData.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationData.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationDataBuilder.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationDataBuilder.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationDataBuilder.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationDataBuilder.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationException.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationException.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationException.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationException.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationKind.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationKind.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationKind.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationKind.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationKindManager.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationKindManager.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationKindManager.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationKindManager.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationManager.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationManager.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/SerializationManager.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/SerializationManager.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/serialization/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/serialization/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/serialization/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/serialization/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/NonExistingResources.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/NonExistingResources.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/NonExistingResources.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/NonExistingResources.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/SyncCommandFactory.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/SyncCommandFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/SyncCommandFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/SyncCommandFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceDirectory.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceDirectory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceDirectory.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceDirectory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceFile.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceFile.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceFile.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceFile.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePath.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePath.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePath.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePath.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePaths.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePaths.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePaths.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspacePaths.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceProject.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceProject.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceProject.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceProject.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceResource.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceResource.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceResource.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/WorkspaceResource.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/DefaultSyncCommandFactory.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/DefaultSyncCommandFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/DefaultSyncCommandFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/DefaultSyncCommandFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingDirectory.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingDirectory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingDirectory.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingDirectory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingFile.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingFile.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingFile.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/impl/NonExistingFile.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/sync/content/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/sync/content/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/sync/content/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/Batcher.java b/shared/api/src/main/java/org/apache/sling/ide/transport/Batcher.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/Batcher.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/Batcher.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/BatcherFactory.java b/shared/api/src/main/java/org/apache/sling/ide/transport/BatcherFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/BatcherFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/BatcherFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/Command.java b/shared/api/src/main/java/org/apache/sling/ide/transport/Command.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/Command.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/Command.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/CommandContext.java b/shared/api/src/main/java/org/apache/sling/ide/transport/CommandContext.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/CommandContext.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/CommandContext.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/CommandExecutionProperties.java b/shared/api/src/main/java/org/apache/sling/ide/transport/CommandExecutionProperties.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/CommandExecutionProperties.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/CommandExecutionProperties.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistry.java b/shared/api/src/main/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistry.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistry.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistry.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/FileInfo.java b/shared/api/src/main/java/org/apache/sling/ide/transport/FileInfo.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/FileInfo.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/FileInfo.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/NodeTypeRegistry.java b/shared/api/src/main/java/org/apache/sling/ide/transport/NodeTypeRegistry.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/NodeTypeRegistry.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/NodeTypeRegistry.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/ProtectedNodes.java b/shared/api/src/main/java/org/apache/sling/ide/transport/ProtectedNodes.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/ProtectedNodes.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/ProtectedNodes.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/Repository.java b/shared/api/src/main/java/org/apache/sling/ide/transport/Repository.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/Repository.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/Repository.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryException.java b/shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryException.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryException.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryException.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryFactory.java b/shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryInfo.java b/shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryInfo.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryInfo.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryInfo.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryResponse.java b/shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryResponse.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/RepositoryResponse.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/RepositoryResponse.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/ResourceAndInfo.java b/shared/api/src/main/java/org/apache/sling/ide/transport/ResourceAndInfo.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/ResourceAndInfo.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/ResourceAndInfo.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/ResourceProxy.java b/shared/api/src/main/java/org/apache/sling/ide/transport/ResourceProxy.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/ResourceProxy.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/ResourceProxy.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/Result.java b/shared/api/src/main/java/org/apache/sling/ide/transport/Result.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/Result.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/Result.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/TracingCommand.java b/shared/api/src/main/java/org/apache/sling/ide/transport/TracingCommand.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/TracingCommand.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/TracingCommand.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcher.java b/shared/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcher.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcher.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcher.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcherFactory.java b/shared/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcherFactory.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcherFactory.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/impl/DefaultBatcherFactory.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/transport/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/transport/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/transport/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/transport/package-info.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/util/PathUtil.java b/shared/api/src/main/java/org/apache/sling/ide/util/PathUtil.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/util/PathUtil.java
rename to shared/api/src/main/java/org/apache/sling/ide/util/PathUtil.java
diff --git a/shared/modules/api/src/main/java/org/apache/sling/ide/util/package-info.java b/shared/api/src/main/java/org/apache/sling/ide/util/package-info.java
similarity index 100%
rename from shared/modules/api/src/main/java/org/apache/sling/ide/util/package-info.java
rename to shared/api/src/main/java/org/apache/sling/ide/util/package-info.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/filter/IgnoredResourcesTest.java b/shared/api/src/test/java/org/apache/sling/ide/filter/IgnoredResourcesTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/filter/IgnoredResourcesTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/filter/IgnoredResourcesTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientTest.java b/shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/serialization/NodeTypeResourceBuilder.java b/shared/api/src/test/java/org/apache/sling/ide/serialization/NodeTypeResourceBuilder.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/serialization/NodeTypeResourceBuilder.java
rename to shared/api/src/test/java/org/apache/sling/ide/serialization/NodeTypeResourceBuilder.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/serialization/SerializationKindManagerTest.java b/shared/api/src/test/java/org/apache/sling/ide/serialization/SerializationKindManagerTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/serialization/SerializationKindManagerTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/serialization/SerializationKindManagerTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/serialization/StubRepository.java b/shared/api/src/test/java/org/apache/sling/ide/serialization/StubRepository.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/serialization/StubRepository.java
rename to shared/api/src/test/java/org/apache/sling/ide/serialization/StubRepository.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathTest.java b/shared/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathsTest.java b/shared/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathsTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathsTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/sync/content/WorkspacePathsTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistryTest.java b/shared/api/src/test/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistryTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistryTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/transport/FallbackNodeTypeRegistryTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/transport/ResourceProxyTest.java b/shared/api/src/test/java/org/apache/sling/ide/transport/ResourceProxyTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/transport/ResourceProxyTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/transport/ResourceProxyTest.java
diff --git a/shared/modules/api/src/test/java/org/apache/sling/ide/util/PathUtilTest.java b/shared/api/src/test/java/org/apache/sling/ide/util/PathUtilTest.java
similarity index 100%
rename from shared/modules/api/src/test/java/org/apache/sling/ide/util/PathUtilTest.java
rename to shared/api/src/test/java/org/apache/sling/ide/util/PathUtilTest.java
diff --git a/shared/modules/api/src/test/resources/bundles.json b/shared/api/src/test/resources/bundles.json
similarity index 100%
rename from shared/modules/api/src/test/resources/bundles.json
rename to shared/api/src/test/resources/bundles.json
diff --git a/shared/modules/api/src/test/resources/sourceReferences.json b/shared/api/src/test/resources/sourceReferences.json
similarity index 100%
rename from shared/modules/api/src/test/resources/sourceReferences.json
rename to shared/api/src/test/resources/sourceReferences.json
diff --git a/shared/modules/artifacts/.project b/shared/artifacts/.project
similarity index 72%
rename from shared/modules/artifacts/.project
rename to shared/artifacts/.project
index d0ed5f0c..25cf518d 100644
--- a/shared/modules/artifacts/.project
+++ b/shared/artifacts/.project
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
diff --git a/shared/modules/artifacts/README.md b/shared/artifacts/README.md
similarity index 100%
rename from shared/modules/artifacts/README.md
rename to shared/artifacts/README.md
diff --git a/shared/modules/artifacts/bnd.bnd b/shared/artifacts/bnd.bnd
similarity index 100%
rename from shared/modules/artifacts/bnd.bnd
rename to shared/artifacts/bnd.bnd
diff --git a/shared/modules/artifacts/pom.xml b/shared/artifacts/pom.xml
similarity index 100%
rename from shared/modules/artifacts/pom.xml
rename to shared/artifacts/pom.xml
diff --git a/shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifact.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifact.java
similarity index 100%
rename from shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifact.java
rename to shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifact.java
diff --git a/shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
similarity index 100%
rename from shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
rename to shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
diff --git a/shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
similarity index 100%
rename from shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
rename to shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
diff --git a/shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/package-info.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/package-info.java
similarity index 100%
rename from shared/modules/artifacts/src/main/java/org/apache/sling/ide/artifacts/package-info.java
rename to shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/package-info.java
diff --git a/shared/modules/api/.project b/shared/filevault-uber-jar/.project
similarity index 67%
rename from shared/modules/api/.project
rename to shared/filevault-uber-jar/.project
index 53aa37e3..27765e13 100644
--- a/shared/modules/api/.project
+++ b/shared/filevault-uber-jar/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.apache.sling.ide.api</name>
+	<name>org.apache.sling.ide.filevault.uber-jar</name>
 	<comment></comment>
 	<projects>
 	</projects>
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
@@ -27,8 +17,8 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
 	</natures>
 </projectDescription>
diff --git a/shared/filevault-uber-jar/README.md b/shared/filevault-uber-jar/README.md
new file mode 100644
index 00000000..e5a888b7
--- /dev/null
+++ b/shared/filevault-uber-jar/README.md
@@ -0,0 +1,4 @@
+# Apache Sling IDE Tools FileVault Uber Jar
+
+This module contains an uber jar of Jackrabbit FileVault and all transitive dependencies. The amount of exported packages is deliberately minimal to
+reduce the potential classpath conflicts with other jars in an OSGi container.
diff --git a/shared/filevault-uber-jar/bnd.bnd b/shared/filevault-uber-jar/bnd.bnd
new file mode 100644
index 00000000..e502e5fc
--- /dev/null
+++ b/shared/filevault-uber-jar/bnd.bnd
@@ -0,0 +1,57 @@
+# keep public exposure as small as possible
+Export-Package: javax.jcr;version="2.0.0", \
+ javax.jcr.nodetype;version="2.0.0", \
+ javax.jcr.lock;version="2.0.0", \
+ javax.jcr.observation;version="2.0.0", \
+ javax.jcr.query;version="2.0.0", \
+ javax.jcr.query.qom;version="2.0.0", \
+ javax.jcr.retention;version="2.0.0", \
+ javax.jcr.security;version="2.0.0", \
+ javax.jcr.util;version="2.0.0", \
+ javax.jcr.version;version="2.0.0", \
+ org.apache.jackrabbit.api, \
+ org.apache.jackrabbit.api.binary, \
+ org.apache.jackrabbit.api.jmx, \
+ org.apache.jackrabbit.api.management, \
+ org.apache.jackrabbit.api.observation, \
+ org.apache.jackrabbit.api.security, \
+ org.apache.jackrabbit.api.security.authorization, \
+ org.apache.jackrabbit.api.security.principal, \
+ org.apache.jackrabbit.api.security.user, \
+ org.apache.jackrabbit.api.stats, \
+ org.apache.jackrabbit.spi.commons.conversion, \
+ org.apache.jackrabbit.spi.commons.namespace, \
+ org.apache.jackrabbit.spi, \
+ org.apache.jackrabbit.spi2dav, \
+ org.apache.jackrabbit.spi2davex, \
+ org.apache.jackrabbit.vault.davex, \
+ org.apache.jackrabbit.vault.fs, \
+ org.apache.jackrabbit.vault.fs.api, \
+ org.apache.jackrabbit.vault.fs.config, \
+ org.apache.jackrabbit.vault.fs.impl, \
+ org.apache.jackrabbit.vault.fs.impl.aggregator, \
+ org.apache.jackrabbit.vault.fs.impl.io, \
+ org.apache.jackrabbit.vault.util
+ 
+ # some generated import-package headers are not necessary
+ # imports being generated from org.apache.commons.io.input.BufferedFileChannelInputStream
+ Import-Package: \
+ !sun.*, \
+ !org.apache.sling.jcr.api, \
+ *
+
+# disable annotation processing (neither declarative services nor metatypes necessary for IDE tooling)
+-dsannotations:
+-metatypeannotations:
+ 
+ # some dependencies can be kept private
+-includeresource: \
+@commons-collections-3.2.2.jar, @commons-io-2.11.0.jar, \
+@org.apache.jackrabbit.vault-${vault.version}.jar!/!OSGI-INF/*, \
+@jackrabbit-spi-${jackrabbit.version}.jar, @jackrabbit-spi2dav-${jackrabbit.version}.jar, \
+@jackrabbit-jcr-client-${jackrabbit.version}.jar,@jackrabbit-jcr2spi-${jackrabbit.version}.jar,@jackrabbit-jcr-commons-${jackrabbit.version}.jar,@jackrabbit-spi-commons-${jackrabbit.version}.jar,@jackrabbit-webdav-${jackrabbit.version}.jar
+
+# whitelist the private reference usage in Packaging.getJcrPackageRegistry(Session)
+-fixupmessages:"Export org.apache.jackrabbit.vault.packaging,  has 1,  private references [org.apache.jackrabbit.vault.packaging.registry.impl]"; \
+    restrict:=warning; \
+    is:=warn
\ No newline at end of file
diff --git a/shared/filevault-uber-jar/pom.xml b/shared/filevault-uber-jar/pom.xml
new file mode 100644
index 00000000..db1f2e33
--- /dev/null
+++ b/shared/filevault-uber-jar/pom.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.apache.sling.ide</groupId>
+		<artifactId>sling-ide-shared-parent</artifactId>
+		<version>1.2.3-SNAPSHOT</version>
+		<relativePath>../parent/</relativePath>
+	</parent>
+
+	<artifactId>org.apache.sling.ide.filevault.uber-jar</artifactId>
+	<name>Apache Sling IDE Tools FileVault Uber-Jar </name>
+
+	<scm>
+		<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
+		<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
+		<url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
+	</scm>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.codehaus.mojo</groupId>
+	                <artifactId>animal-sniffer-maven-plugin</artifactId>
+	                <configuration>
+	                	<skip>true</skip>
+	                </configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<!-- START JCR dependencies -->
+		<dependency>
+			<groupId>javax.jcr</groupId>
+			<artifactId>jcr</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END JCR dependencies -->
+
+		<!-- START Apache Jackrabbit dependencies -->
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>oak-jackrabbit-api</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-webdav</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi-commons</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-commons</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr2spi</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-client</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi2dav</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpmime</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END Apache Jackrabbit dependencies -->
+
+		<!-- START Apache Jackrabbit FileVault dependencies -->
+		<dependency>
+			<groupId>org.apache.jackrabbit.vault</groupId>
+			<artifactId>vault-davex</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit.vault</groupId>
+			<artifactId>org.apache.jackrabbit.vault</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END Apache Jackrabbit FileVault dependencies -->
+
+	</dependencies>
+</project>
diff --git a/shared/modules/impl-resource/.project b/shared/impl-resource/.project
similarity index 72%
rename from shared/modules/impl-resource/.project
rename to shared/impl-resource/.project
index 11534a16..f4e01544 100644
--- a/shared/modules/impl-resource/.project
+++ b/shared/impl-resource/.project
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
diff --git a/shared/modules/impl-resource/README.md b/shared/impl-resource/README.md
similarity index 100%
rename from shared/modules/impl-resource/README.md
rename to shared/impl-resource/README.md
diff --git a/shared/modules/impl-resource/bnd.bnd b/shared/impl-resource/bnd.bnd
similarity index 100%
rename from shared/modules/impl-resource/bnd.bnd
rename to shared/impl-resource/bnd.bnd
diff --git a/shared/modules/impl-resource/pom.xml b/shared/impl-resource/pom.xml
similarity index 100%
rename from shared/modules/impl-resource/pom.xml
rename to shared/impl-resource/pom.xml
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilter.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilter.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilter.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilter.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilterLocator.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilterLocator.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilterLocator.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/filer/SimpleFilterLocator.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractResult.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractResult.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractResult.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/AbstractResult.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/DeleteNodeCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/DeleteNodeCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/DeleteNodeCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/DeleteNodeCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeContentCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeContentCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeContentCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/GetNodeContentCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/ListChildrenCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/ListChildrenCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/ListChildrenCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/ListChildrenCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/UpdateContentCommand.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/UpdateContentCommand.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/UpdateContentCommand.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/transport/UpdateContentCommand.java
diff --git a/shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/util/Constants.java b/shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/util/Constants.java
similarity index 100%
rename from shared/modules/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/util/Constants.java
rename to shared/impl-resource/src/main/java/org/apache/sling/ide/impl/resource/util/Constants.java
diff --git a/shared/modules/impl-resource/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java b/shared/impl-resource/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java
similarity index 100%
rename from shared/modules/impl-resource/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java
rename to shared/impl-resource/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java
diff --git a/shared/modules/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.serializedDataIsEscaped.xml b/shared/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.serializedDataIsEscaped.xml
similarity index 100%
rename from shared/modules/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.serializedDataIsEscaped.xml
rename to shared/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.serializedDataIsEscaped.xml
diff --git a/shared/modules/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.stringSerializedData.xml b/shared/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.stringSerializedData.xml
similarity index 100%
rename from shared/modules/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.stringSerializedData.xml
rename to shared/impl-resource/src/test/resources/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.stringSerializedData.xml
diff --git a/shared/modules/impl-vlt/.project b/shared/impl-vlt/.project
similarity index 72%
rename from shared/modules/impl-vlt/.project
rename to shared/impl-vlt/.project
index a5eecdb5..46d0e85a 100644
--- a/shared/modules/impl-vlt/.project
+++ b/shared/impl-vlt/.project
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
diff --git a/shared/modules/impl-vlt/README.md b/shared/impl-vlt/README.md
similarity index 100%
rename from shared/modules/impl-vlt/README.md
rename to shared/impl-vlt/README.md
diff --git a/shared/modules/impl-vlt/bnd.bnd b/shared/impl-vlt/bnd.bnd
similarity index 72%
rename from shared/modules/impl-vlt/bnd.bnd
rename to shared/impl-vlt/bnd.bnd
index c6f44213..1cb5e53b 100644
--- a/shared/modules/impl-vlt/bnd.bnd
+++ b/shared/impl-vlt/bnd.bnd
@@ -1,3 +1,3 @@
--includeresource: plugin.xml, .options
 Bundle-SymbolicName: org.apache.sling.ide.impl-vlt;singleton:=true
 SlingIDE-PluginLoggerEnabled: true
+Bundle-ActivationPolicy: lazy
diff --git a/shared/modules/impl-vlt/pom.xml b/shared/impl-vlt/pom.xml
similarity index 88%
rename from shared/modules/impl-vlt/pom.xml
rename to shared/impl-vlt/pom.xml
index 91871317..0a1509b2 100644
--- a/shared/modules/impl-vlt/pom.xml
+++ b/shared/impl-vlt/pom.xml
@@ -77,21 +77,18 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.1.44</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>vault-davex</artifactId>
-            <version>3.1.44</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>jackrabbit-spi-commons</artifactId>
-            <version>2.16.0</version>
             <scope>provided</scope>
         </dependency>
 
@@ -146,8 +143,27 @@
         </dependency>
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-core</artifactId>
-            <version>2.16.0</version>
+            <artifactId>oak-core</artifactId>
+            <version>${oak.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-core</artifactId>
+            <version>${oak.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-jcr</artifactId>
+            <version>${oak.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-segment-tar</artifactId>
+            <version>${oak.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
similarity index 97%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
index 3f87e82b..c04b843c 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
@@ -20,8 +20,8 @@ import static org.apache.jackrabbit.vault.util.JcrConstants.JCR_CONTENT;
 import static org.apache.jackrabbit.vault.util.JcrConstants.JCR_DATA;
 import static org.apache.jackrabbit.vault.util.JcrConstants.JCR_LASTMODIFIED;
 import static org.apache.jackrabbit.vault.util.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.vault.util.JcrConstants.NT_FILE;
 import static org.apache.jackrabbit.vault.util.JcrConstants.NT_RESOURCE;
-import static org.apache.sling.ide.transport.Repository.NT_FILE;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -53,8 +53,8 @@ import javax.jcr.ValueFactory;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.nodetype.PropertyDefinition;
 
+import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.util.JcrConstants;
-import org.apache.jackrabbit.vault.util.Text;
 import org.apache.sling.ide.filter.FilterResult;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.transport.CommandContext;
@@ -97,8 +97,12 @@ public class AddOrUpdateNodeCommand extends JcrCommand<Void> {
             getLogger().trace("Found existing node at {0} with primaryType {1}", path,
                     node.getPrimaryNodeType().getName());
         } else {
-            node = createNode(resource, session);
-            getLogger().trace("Created node at {0} with primaryType {1}", path, node.getPrimaryNodeType().getName());
+        	try {
+	            node = createNode(resource, session);
+	            getLogger().trace("Created node at {0} with primaryType {1}", path, node.getPrimaryNodeType().getName());
+        	} catch (RepositoryException e) {
+        		throw new RepositoryException("Could not create node at " + Text.getRelativeParent(resource.getPath(), 1) + " based on resource " + resource, e);
+        	}
         }
 
         if (nodeExists && getFlags().contains(CommandExecutionFlag.CREATE_ONLY_WHEN_MISSING)) {
@@ -163,7 +167,7 @@ public class AddOrUpdateNodeCommand extends JcrCommand<Void> {
         }
 
         if (!session.nodeExists(parentLocation)) {
-            throw new RepositoryException("No parent found at " + parentLocation + " ; it's needed to create node at "
+            throw new RepositoryException("No parent node found at " + parentLocation + "; it's needed to create node at "
                     + resource.getPath());
         }
 
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ConversionUtils.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ConversionUtils.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ConversionUtils.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ConversionUtils.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/DeleteNodeCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/DeleteNodeCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/DeleteNodeCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/DeleteNodeCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java
similarity index 92%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java
index c2c4efb8..c8b272e1 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/JcrResult.java
@@ -59,12 +59,14 @@ public class JcrResult<T> implements Result<T> {
     @Override
     public String toString() {
         StringBuilder out = new StringBuilder();
-        out.append(getClass().getSimpleName()).append("[ success:").append(success);
+        out.append(getClass().getSimpleName()).append(" [success:").append(success);
 
-        if (exception != null)
+        if (exception != null) {
+        	// TODO: stack trace
+        	// TODO: log cause
             out.append(", exception: ").append(exception.getClass().getName()).append(" - ")
                     .append(exception.getMessage());
-
+        }
         out.append(']');
 
         return out.toString();
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListTreeCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListTreeCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListTreeCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ListTreeCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/NoOpCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/NoOpCommand.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/NoOpCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/NoOpCommand.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java
similarity index 99%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java
index c6909bf4..48460f6e 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommand.java
@@ -31,7 +31,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 
-import org.apache.jackrabbit.vault.util.Text;
+import org.apache.jackrabbit.util.Text;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.transport.ResourceProxy;
 
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocator.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocator.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocator.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocator.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocatorImpl.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocatorImpl.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocatorImpl.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VaultFsLocatorImpl.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeDefinition.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeDefinition.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeDefinition.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeDefinition.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeType.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeType.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeType.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeType.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeFactory.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeFactory.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeFactory.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeFactory.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeRegistry.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeRegistry.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeRegistry.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltNodeTypeRegistry.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltPropertyDefinition.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltPropertyDefinition.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltPropertyDefinition.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltPropertyDefinition.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepository.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepository.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepository.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepository.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
similarity index 99%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
index e969f484..64f4261b 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
@@ -33,7 +33,7 @@ import org.osgi.service.event.EventAdmin;
  * This service should get precedence over {@code org.apache.sling.ide.impl.resource.transport.RepositoryFactoryImpl} in
  * case both are deployed in an OSGi container.
  */
-@Component(service = RepositoryFactory.class, property="service.ranking:Integer=1000")
+@Component(service = RepositoryFactory.class, property="service.ranking:Integer=1000", immediate = true)
 public class VltRepositoryFactory implements RepositoryFactory {
 
     @Reference
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilter.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilter.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilter.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilter.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilterLocator.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilterLocator.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilterLocator.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/filter/VltFilterLocator.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandler.java
similarity index 65%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandler.java
index 55640fc8..79c25f95 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.ide.impl.vlt.serialization;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URISyntaxException;
 import java.util.Calendar;
@@ -24,41 +25,28 @@ import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.Optional;
 import java.util.UUID;
 
-import javax.jcr.NamespaceException;
 import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
 
-import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
-import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.util.ISO8601;
-import org.apache.jackrabbit.util.ISO9075;
-import org.apache.jackrabbit.vault.util.DocViewNode;
-import org.apache.jackrabbit.vault.util.DocViewProperty;
-import org.apache.sling.ide.log.Logger;
+import org.apache.jackrabbit.vault.fs.io.DocViewParserHandler;
+import org.apache.jackrabbit.vault.util.DocViewNode2;
+import org.apache.jackrabbit.vault.util.DocViewProperty2;
 import org.apache.sling.ide.transport.ResourceProxy;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
 
-public class ContentXmlHandler extends DefaultHandler implements NamespaceResolver {
+public class ResourceProxyParserHandler implements DocViewParserHandler {
 
-    private static final String JCR_ROOT = "jcr:root";
-    private final ResourceProxy root;
-    private final Deque<ResourceProxy> queue = new LinkedList<>();
+	private ResourceProxy root;
+	
+	private NameResolver nameResolver;
 
-    /** 
-     * map containing fully qualified uris as keys and their defined prefixes as values
-     */
-    private final Map<String, String> uriPrefixMap;
-    
-    /**
-     * the default name path resolver
-     */
-    private final DefaultNamePathResolver npResolver = new DefaultNamePathResolver(this);
-    private Logger logger;
+	private final Deque<ResourceProxy> resourceQueue = new LinkedList<>();
 
-    /**
+	/**
      * all type hint classes in a map (key = type integer value)
      */
     private static final Map<Integer, TypeHint> TYPE_HINT_MAP;
@@ -70,76 +58,46 @@ public class ContentXmlHandler extends DefaultHandler implements NamespaceResolv
         }
     }
 
-    public ContentXmlHandler(String rootResourcePath, Logger logger) {
-        root = new ResourceProxy(rootResourcePath);
-        uriPrefixMap = new HashMap<>();
-        
-        this.logger = logger;
-    }
-
-    @Override
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-        uriPrefixMap.put(uri, prefix);
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-
-        ResourceProxy current;
-        // name is equal to label except for SNS
-        String label = ISO9075.decode(qName);
-        String name = label;
-        // code mostly taken from {@link org.apache.jackrabbit.vault.fs.impl.io.DocViewSaxImporter}
-        DocViewNode node;
-        try {
-            node = new DocViewNode(name, label, attributes, npResolver);
-            
-            if (qName.equals(JCR_ROOT)) {
-                current = root;
-            } else {
-               ResourceProxy parent = queue.peekLast();
-
-                StringBuilder path = new StringBuilder(parent.getPath());
-                if (path.charAt(path.length() - 1) != '/')
-                    path.append('/');
-                path.append(qName);
-
-                current = new ResourceProxy(ISO9075.decode(path.toString()));
-                parent.addChild(current);
-            }
-
-            for (Map.Entry<String, DocViewProperty> entry : node.props.entrySet()) {
-
-                try {
-                    Object typedValue = TypeHint.convertDocViewPropertyToTypedValue(entry.getValue());
-                    
-                    // unsupported
-                    if (typedValue == null) {
-                        continue;
-                    }
-                    current.addProperty(entry.getKey(), typedValue);
-                } catch (Throwable t) {
-                    logger.error("Could not parse property '" + entry.getValue().name, t);
-                }
-            }
-
-            queue.add(current);
-        } catch (NamespaceException e) {
-            logger.error("Could not resolve a JCR namespace.", e);
-        }
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-
-        queue.removeLast();
-    }
-
-    public ResourceProxy getRoot() {
-        return root;
-    }
-    
-    /**
+	public ResourceProxyParserHandler() {
+		
+	}
+	
+	
+	@Override
+	public void setNameResolver(NameResolver nameResolver) {
+		this.nameResolver = nameResolver;
+	}
+
+
+	@Override
+	public void startDocViewNode(String nodePath, DocViewNode2 docViewNode, Optional<DocViewNode2> parentDocViewNode,
+			int line, int column) throws IOException, RepositoryException {
+		
+		ResourceProxy currentResource = new ResourceProxy(nodePath);
+		for (DocViewProperty2 property: docViewNode.getProperties()) {
+			Object value = TypeHint.convertDocViewPropertyToTypedValue(property);
+			if (value != null) {
+				// always use qualified names (leveraging the namespace declaration from the DocView XML)
+				currentResource.addProperty(nameResolver.getJCRName(property.getName()), value);
+			}
+		}
+		if (root == null) {
+			root = currentResource;
+		} else {
+			ResourceProxy parent = resourceQueue.peekLast();
+            parent.addChild(currentResource);
+		}
+		resourceQueue.add(currentResource); 
+		
+	}
+
+	@Override
+	public void endDocViewNode(String nodePath, DocViewNode2 docViewNode, Optional<DocViewNode2> parentDocViewNode,
+			int line, int column) throws IOException, RepositoryException {
+		resourceQueue.removeLast();
+	}
+
+	/**
      * Each enum implements the {@link TypeHint#parseValues(String[], boolean)} in a way, that the String[] value is converted to the closest underlying type.
      */
     static enum TypeHint {
@@ -292,12 +250,12 @@ public class ContentXmlHandler extends DefaultHandler implements NamespaceResolv
             }
         };
 
-        static Object convertDocViewPropertyToTypedValue(DocViewProperty property) {
-            TypeHint hint = TYPE_HINT_MAP.get(property.type);
+        static Object convertDocViewPropertyToTypedValue(DocViewProperty2 property) {
+            TypeHint hint = TYPE_HINT_MAP.get(property.getType());
             if (hint == null) {
-                throw new IllegalArgumentException("Unknown type value '" + property.type + "'");
+                throw new IllegalArgumentException("Unknown type value '" + property.getType() + "'");
             }
-            return hint.parseValues(property.values, property.isMulti);
+            return hint.parseValues(property.getStringValues().toArray(new String[0]), property.isMultiValue());
         }
 
         private final int propertyType;
@@ -315,21 +273,7 @@ public class ContentXmlHandler extends DefaultHandler implements NamespaceResolv
 
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public String getURI(String prefix) throws NamespaceException {
-        throw new UnsupportedOperationException("The method getUri is not implemented as this is not being used");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPrefix(String uri) throws NamespaceException {
-       String prefix = uriPrefixMap.get(uri);
-       if (prefix == null) {
-           throw new NamespaceException("Could not find defined prefix for uri " + uri);
-       }
-       return prefix;
-    }
+	public ResourceProxy getRoot() {
+		return root;
+	}
 }
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
similarity index 99%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
index a5c1172f..a00e9f00 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
@@ -34,6 +34,7 @@ import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 import javax.jcr.nodetype.NodeType;
 
+import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.fs.api.Aggregate;
 import org.apache.jackrabbit.vault.fs.api.Aggregator;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
@@ -47,7 +48,6 @@ import org.apache.jackrabbit.vault.util.Constants;
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.apache.jackrabbit.vault.util.MimeTypes;
 import org.apache.jackrabbit.vault.util.PlatformNameFormat;
-import org.apache.jackrabbit.vault.util.Text;
 import org.apache.sling.ide.impl.vlt.VaultFsLocator;
 import org.apache.sling.ide.jcr.RepositoryUtils;
 import org.apache.sling.ide.log.Logger;
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
similarity index 88%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
index d98ae8fc..0adc9c7c 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
+++ b/shared/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
@@ -27,20 +27,17 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.fs.Mounter;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
-import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultFile;
 import org.apache.jackrabbit.vault.fs.api.VaultFileSystem;
-import org.apache.jackrabbit.vault.fs.impl.io.XmlAnalyzer;
+import org.apache.jackrabbit.vault.fs.io.DocViewParser;
+import org.apache.jackrabbit.vault.fs.io.DocViewParser.XmlParseException;
 import org.apache.jackrabbit.vault.util.Constants;
 import org.apache.jackrabbit.vault.util.PlatformNameFormat;
 import org.apache.jackrabbit.vault.util.RepositoryProvider;
-import org.apache.jackrabbit.vault.util.Text;
 import org.apache.sling.ide.impl.vlt.VaultFsLocator;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.serialization.SerializationDataBuilder;
@@ -51,7 +48,6 @@ import org.apache.sling.ide.transport.ResourceProxy;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
 
 @Component(service = SerializationManager.class)
 public class VltSerializationManager implements SerializationManager {
@@ -126,8 +122,7 @@ public class VltSerializationManager implements SerializationManager {
         // TODO - copied from TransactionImpl
         
         try (InputStream in = new BufferedInputStream(new FileInputStream(file))) {
-            SerializationType serType = XmlAnalyzer.analyze(new InputSource(in));
-            return serType == SerializationType.XML_DOCVIEW;
+            return DocViewParser.isDocView(new InputSource(in));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
@@ -156,8 +151,7 @@ public class VltSerializationManager implements SerializationManager {
         // TODO - copied from TransactionImpl
         
         try (InputStream in = new BufferedInputStream(new FileInputStream(file))) {
-            SerializationType serType = XmlAnalyzer.analyze(new InputSource(in));
-            if (serType == SerializationType.XML_DOCVIEW) {
+            if (DocViewParser.isDocView(new InputSource(in))) {
                 return getPathWithoutXmlExtension(file);
             }
 
@@ -235,22 +229,17 @@ public class VltSerializationManager implements SerializationManager {
 
     @Override
     public ResourceProxy readSerializationData(String filePath, InputStream source) throws IOException {
-
         if (source == null)
             return null;
 
         String repositoryPath = getRepositoryPath(filePath);
 
         try {
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
-            SAXParser parser = factory.newSAXParser();
-            ContentXmlHandler handler = new ContentXmlHandler(repositoryPath, logger);
-            parser.parse(source, handler);
-
+        	DocViewParser parser = new DocViewParser();
+        	ResourceProxyParserHandler handler = new ResourceProxyParserHandler();
+        	parser.parse(repositoryPath, new InputSource(source), handler);
             return handler.getRoot();
-        } catch (SAXException | ParserConfigurationException e) {
+        } catch (XmlParseException e) {
             // TODO proper error handling
             throw new IOException(e);
         }
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/jcr/RepositoryUtils.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/jcr/RepositoryUtils.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/jcr/RepositoryUtils.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/jcr/RepositoryUtils.java
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/jcr/package-info.java b/shared/impl-vlt/src/main/java/org/apache/sling/ide/jcr/package-info.java
similarity index 100%
rename from shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/jcr/package-info.java
rename to shared/impl-vlt/src/main/java/org/apache/sling/ide/jcr/package-info.java
diff --git a/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
new file mode 100644
index 00000000..054169bb
--- /dev/null
+++ b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
@@ -0,0 +1,381 @@
+/*
+ * 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.ide.impl.vlt;
+
+import static org.apache.sling.ide.transport.Repository.CommandExecutionFlag.CREATE_ONLY_WHEN_MISSING;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.Session;
+import javax.jcr.Value;
+
+import org.apache.jackrabbit.vault.util.JcrConstants;
+import org.apache.sling.ide.filter.Filter;
+import org.apache.sling.ide.filter.FilterResult;
+import org.apache.sling.ide.log.Logger;
+import org.apache.sling.ide.transport.CommandContext;
+import org.apache.sling.ide.transport.ResourceProxy;
+import org.hamcrest.Matchers;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class AddOrUpdateNodeCommandTest {
+
+	private static final CommandContext DEFAULT_CONTEXT = new CommandContext(new Filter() {
+		@Override
+		public FilterResult filter(String repositoryPath) {
+			return FilterResult.ALLOW;
+		}
+	});
+
+	@Rule
+	public final RepositoryManager repositoryManager = new RepositoryManager();
+
+	private static final String PROP_NAME = "jcr:title";
+
+	private Logger logger = new Slf4jLogger();
+
+	@Test
+	public void setProperty() throws Exception {
+
+		doPropertyChangeTest(null, "Title");
+	}
+
+	private ResourceProxy newResource(String path, String primaryType) {
+
+		ResourceProxy resource = new ResourceProxy(path);
+		resource.addProperty("jcr:primaryType", primaryType);
+		return resource;
+	}
+
+	
+	private void doPropertyChangeTest(final Object initialPropertyValues, final Object newPropertyValues)
+			throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		Node contentNode = session.getRootNode().addNode("content");
+		if (initialPropertyValues instanceof String) {
+			contentNode.setProperty(PROP_NAME, (String) initialPropertyValues);
+		} else if (initialPropertyValues instanceof String[]) {
+			contentNode.setProperty(PROP_NAME, (String[]) initialPropertyValues);
+		}
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", JcrConstants.NT_UNSTRUCTURED);
+		if (newPropertyValues != null) {
+			resource.addProperty(PROP_NAME, newPropertyValues);
+		}
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(),
+				repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null, resource, logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		if (newPropertyValues == null) {
+			assertThat(session.getNode("/content").hasProperty(PROP_NAME), equalTo(false));
+			return;
+		}
+
+		Property newProp = session.getNode("/content").getProperty(PROP_NAME);
+		if (newPropertyValues instanceof String) {
+			assertThat("property.isMultiple", newProp.isMultiple(), equalTo(Boolean.FALSE));
+			assertThat(newProp.getString(), equalTo((String) newPropertyValues));
+
+		} else {
+
+			String[] expectedValues = (String[]) newPropertyValues;
+			assertThat("property.isMultiple", newProp.isMultiple(), equalTo(Boolean.TRUE));
+
+			Value[] values = session.getNode("/content").getProperty(PROP_NAME).getValues();
+
+			assertThat(values.length, equalTo(expectedValues.length));
+			for (int i = 0; i < values.length; i++) {
+				assertThat(values[i].getString(), equalTo(expectedValues[i]));
+			}
+
+		}
+
+	}
+
+	@Test
+	public void removeProperty() throws Exception {
+
+		doPropertyChangeTest("Title", null);
+	}
+
+	@Test
+	public void singlePropertyToMultiValued() throws Exception {
+
+		doPropertyChangeTest("Title", new String[] { "Title", "Title 2" });
+	}
+
+	@Test
+	public void multiValuesPropertyToSingle() throws Exception {
+
+		doPropertyChangeTest(new String[] { "Title", "Title 2" }, "Title");
+	}
+
+	
+	@Test
+	public void changeNtFolderToSlingFolderWithAddedProperty() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		session.getRootNode().addNode("content", "nt:folder");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "sling:Folder");
+		resource.getProperties().put("newProperty", "some/value");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		Node content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("sling:Folder"));
+
+	}
+
+	@Test
+	public void changeSlingFolderToNtFolderWithExistingProperty() throws Exception {
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "sling:Folder");
+		content.setProperty("newProperty", "some/value");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "nt:folder");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:folder"));
+
+	}
+
+	@Test
+	@Ignore("SLING-4036")
+	public void updateNtUnstructuredToNodeWithRequiredProperty() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "nt:unstructured");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "custom");
+		resource.getProperties().put("attribute", "some value");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("custom"));
+
+	}
+
+	@Test
+	public void nodeNotPresentButOutsideOfFilterIsNotRemoved() throws Exception {
+
+		final CommandContext context = new CommandContext(new Filter() {
+
+			@Override
+			public FilterResult filter(String repositoryPath) {
+				if (repositoryPath.equals("/content/not-included-child")) {
+					return FilterResult.DENY;
+				}
+
+				return FilterResult.ALLOW;
+			}
+		});
+
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "nt:unstructured");
+		content.addNode("included-child");
+		content.addNode("not-included-child");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "nt:unstructured");
+		resource.addChild(newResource("/content/included-child", "nt:unstructured"));
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), context, null, resource,
+				logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		content.getNode("included-child");
+		content.getNode("not-included-child");
+
+	}
+
+	
+	@Test
+	public void createIfRequiredFlagSkipsExistingResources() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "nt:folder");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "nt:unstructured");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger, CREATE_ONLY_WHEN_MISSING);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:folder"));
+
+	}
+
+	@Test
+	public void createIfRequiredFlagCreatesNeededResources() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		ResourceProxy resource = newResource("/content", "nt:unstructured");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger, CREATE_ONLY_WHEN_MISSING);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		Node content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:unstructured"));
+
+	}
+
+	@Test
+	public void createIfRequiredFlagCreatesNeededResourcesEvenWhenPrimaryTypeIsMissing() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		ResourceProxy resource = new ResourceProxy("/content");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger, CREATE_ONLY_WHEN_MISSING);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		Node content = session.getRootNode().getNode("content");
+		assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:unstructured"));
+
+	}
+
+	@Test
+	public void autoCreatedPropertiesAreNotRemoved() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "nt:folder");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "nt:folder");
+		resource.addProperty("jcr:mixinTypes", "mix:lastModified");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+		cmd.execute().get(); // second time since mixins are processed after properties so we need two
+								// executions to
+								// expose the problem
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		assertThat("jcr:lastModified property not present", content.hasProperty("jcr:lastModified"),
+				equalTo(true));
+		assertThat("jcr:lastModifiedBy property not present", content.hasProperty("jcr:lastModifiedBy"),
+				equalTo(true));
+
+	}
+
+	@Test
+	public void autoCreatedPropertiesAreUpdatedIfPresent() throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		Node content = session.getRootNode().addNode("content", "nt:folder");
+
+		session.save();
+
+		ResourceProxy resource = newResource("/content", "nt:folder");
+		resource.addProperty("jcr:mixinTypes", "mix:lastModified");
+		resource.addProperty("jcr:lastModifiedBy", "admin2");
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+		cmd.execute().get(); // second time since mixins are processed after properties so we need two
+								// executions to
+								// expose the problem
+
+		session.refresh(false);
+
+		content = session.getRootNode().getNode("content");
+		assertThat("jcr:lastModifiedBy property not modified",
+				content.getProperty("jcr:lastModifiedBy").getString(), equalTo("admin2"));
+
+	}
+
+	@Test
+	public void setEmptyMixinTypes() throws Exception {
+		setMixinTypes0();
+	}
+
+	private void setMixinTypes0(final String... mixinTypeNames) throws Exception {
+
+		Session session = repositoryManager.getAdminSession();
+		ResourceProxy resource = newResource("/content", "nt:unstructured");
+		resource.addProperty("jcr:mixinTypes", mixinTypeNames);
+
+		AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repositoryManager.getRepository(),
+				repositoryManager.getAdminCredentials(), DEFAULT_CONTEXT, null,
+				resource, logger);
+		cmd.execute().get();
+
+		session.refresh(false);
+
+		Node content = session.getRootNode().getNode("content");
+		assertThat(content.getMixinNodeTypes(), Matchers.arrayWithSize(mixinTypeNames.length));
+
+	}
+
+	@Test
+	public void setMixinTypes() throws Exception {
+
+		setMixinTypes0("mix:created");
+	}
+
+}
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java
similarity index 88%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java
index f08cac47..189468fe 100644
--- a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java
+++ b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/ReorderChildNodesCommandTest.java
@@ -20,24 +20,25 @@ import static java.util.Arrays.asList;
 import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertThat;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
 
-import org.apache.jackrabbit.core.TransientRepository;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.transport.ResourceProxy;
+import org.junit.Rule;
 import org.junit.Test;
 
 public class ReorderChildNodesCommandTest {
 
     private Logger logger = new Slf4jLogger();
 
+    @Rule
+	public final RepositoryManager repositoryManager = new RepositoryManager();
+  
     @Test
     public void singleReordering() throws Exception {
 
@@ -75,11 +76,7 @@ public class ReorderChildNodesCommandTest {
             expected = resourceNames;
         }
 
-        File out = new File(new File("target"), "jackrabbit");
-
-        TransientRepository repo = new TransientRepository(new File(out, "repository.xml"), new File(out, "repository"));
-        SimpleCredentials credentials = new SimpleCredentials("admin", "admin".toCharArray());
-        Session session = repo.login(credentials);
+        Session session = repositoryManager.getAdminSession();
         List<String> finalOrder;
         try {
             Node content = session.getRootNode().addNode("content");
@@ -96,7 +93,7 @@ public class ReorderChildNodesCommandTest {
                 resource.addChild(newResource("/content/" + resourceName, "nt:unstructured"));
             }
 
-            ReorderChildNodesCommand cmd = new ReorderChildNodesCommand(repo, credentials, resource, logger);
+            ReorderChildNodesCommand cmd = new ReorderChildNodesCommand(repositoryManager.getRepository(), repositoryManager.getAdminCredentials(), resource, logger);
             cmd.execute().get();
 
             session.refresh(false);
diff --git a/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/RepositoryManager.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/RepositoryManager.java
new file mode 100644
index 00000000..4c074bed
--- /dev/null
+++ b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/RepositoryManager.java
@@ -0,0 +1,177 @@
+/*
+ * 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.ide.impl.vlt;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
+import javax.jcr.nodetype.NodeTypeExistsException;
+
+import org.apache.jackrabbit.api.JackrabbitRepository;
+import org.apache.jackrabbit.commons.cnd.CndImporter;
+import org.apache.jackrabbit.commons.cnd.ParseException;
+import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
+import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.plugins.tree.impl.RootProviderService;
+import org.apache.jackrabbit.oak.plugins.tree.impl.TreeProviderService;
+import org.apache.jackrabbit.oak.security.internal.SecurityProviderBuilder;
+import org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.jackrabbit.oak.spi.security.user.AuthorizableNodeName;
+import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
+import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction;
+import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
+import org.junit.Rule;
+import org.junit.rules.ExternalResource;
+
+/**
+ * Creates an in memory Oak repository.
+ * To be used as JUnit {@link Rule}.
+ */
+public class RepositoryManager extends ExternalResource {
+
+	private Repository repository;
+	private Session adminSession;
+
+	public RepositoryManager() {
+
+	}
+
+	public Repository getRepository() throws RepositoryException, ParseException, IOException {
+		if (repository == null) {
+			repository = createOakRepository();
+		}
+		return repository;
+	}
+
+	/**
+	 * @return the singleton admin session which is automatically closed at the end
+	 *         of the test
+	 * @throws LoginException
+	 * @throws RepositoryException
+	 * @throws IOException 
+	 * @throws ParseException 
+	 */
+	public Session getAdminSession() throws LoginException, RepositoryException, ParseException, IOException {
+		if (adminSession == null) {
+			adminSession = getRepository().login(getAdminCredentials());
+		}
+		return adminSession;
+	}
+
+	/**
+	 * @return a new admin session
+	 * @throws LoginException
+	 * @throws RepositoryException
+	 * @throws IOException 
+	 * @throws ParseException 
+	 */
+	public Session createAdminSession() throws LoginException, RepositoryException, ParseException, IOException {
+		return getRepository().login(getAdminCredentials());
+	}
+
+	public Credentials getAdminCredentials() {
+		return new SimpleCredentials("admin", "admin".toCharArray());
+	}
+
+	Repository createOakRepository() throws RepositoryException, ParseException, IOException {
+		// in-memory repo
+		Jcr jcr = new Jcr();
+
+		// TODO: optimize by disabling JMX with
+		// https://issues.apache.org/jira/browse/OAK-9959
+		Repository repository = jcr.with(createSecurityProvider()).withAtomicCounter().createRepository();
+
+		// setup default read ACL for everyone
+		Session admin = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
+		AccessControlUtils.addAccessControlEntry(admin, "/", EveryonePrincipal.getInstance(),
+				new String[] { "jcr:read" }, true);
+		
+		// add some more node type definitions
+		importNodeTypeDefinitions(admin, "test-definitions.cnd");
+        importNodeTypeDefinitions(admin, "folder.cnd");
+        
+		admin.save();
+		admin.logout();
+
+		return repository;
+	}
+
+	private void importNodeTypeDefinitions(Session session, String cndResourceName)
+			throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException,
+			ParseException, RepositoryException, IOException {
+		try (InputStream cndInput = getClass().getResourceAsStream(cndResourceName)) {
+			if (cndInput == null) {
+				throw new IllegalArgumentException("Unable to read classpath resource " + cndResourceName);
+			}
+			CndImporter.registerNodeTypes(new InputStreamReader(cndInput), session);
+		}
+	}
+
+	static SecurityProvider createSecurityProvider() {
+		SecurityProvider securityProvider = SecurityProviderBuilder.newBuilder()
+				.with(getSecurityConfigurationParameters()).withRootProvider(new RootProviderService())
+				.withTreeProvider(new TreeProviderService()).build();
+		return securityProvider;
+	}
+
+	static ConfigurationParameters getSecurityConfigurationParameters() {
+		Properties userProps = new Properties();
+		AuthorizableNodeName nameGenerator = new RandomAuthorizableNodeName();
+
+		userProps.put(UserConstants.PARAM_USER_PATH, "/home/users");
+		userProps.put(UserConstants.PARAM_GROUP_PATH, "/home/groups");
+		userProps.put(AccessControlAction.USER_PRIVILEGE_NAMES, new String[] { PrivilegeConstants.JCR_ALL });
+		userProps.put(AccessControlAction.GROUP_PRIVILEGE_NAMES, new String[] { PrivilegeConstants.JCR_READ });
+		userProps.put(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, ImportBehavior.NAME_BESTEFFORT);
+		userProps.put(UserConstants.PARAM_AUTHORIZABLE_NODE_NAME, nameGenerator);
+		userProps.put("cacheExpiration", 3600 * 1000);
+		Properties authzProps = new Properties();
+		authzProps.put(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, ImportBehavior.NAME_BESTEFFORT);
+		return ConfigurationParameters.of(UserConfiguration.NAME, ConfigurationParameters.of(userProps),
+				AuthorizationConfiguration.NAME, ConfigurationParameters.of(authzProps));
+	}
+
+	@Override
+	protected void after() {
+		if (repository != null) {
+			if (adminSession != null && adminSession.isLive()) {
+				adminSession.logout();
+			}
+			if (repository instanceof JackrabbitRepository) {
+				((JackrabbitRepository) repository).shutdown();
+			}
+		}
+	}
+
+}
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
similarity index 100%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/filter/VltFilterTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/filter/VltFilterTest.java
similarity index 100%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/filter/VltFilterTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/filter/VltFilterTest.java
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandlerTest.java
similarity index 85%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandlerTest.java
index f462a447..8f4dfc5f 100644
--- a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
+++ b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ResourceProxyParserHandlerTest.java
@@ -23,6 +23,7 @@ import static org.hamcrest.Matchers.hasSize;
 import static org.junit.Assert.assertThat;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Map;
@@ -31,6 +32,8 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.jackrabbit.vault.fs.io.DocViewParser;
+import org.apache.jackrabbit.vault.fs.io.DocViewParser.XmlParseException;
 import org.apache.sling.ide.impl.vlt.Slf4jLogger;
 import org.apache.sling.ide.transport.ResourceProxy;
 import org.hamcrest.Description;
@@ -41,10 +44,10 @@ import org.junit.Test;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
-public class ContentXmlHandlerTest {
+public class ResourceProxyParserHandlerTest {
 
     @Test
-    public void simpleContentXml() throws ParserConfigurationException, SAXException, IOException {
+    public void simpleContentXml() throws IOException, XmlParseException {
 
         Map<String, Object> properties = parseContentXmlFile("simple-content.xml", "/").getProperties();
 
@@ -66,24 +69,19 @@ public class ContentXmlHandlerTest {
     }
 
     private ResourceProxy parseContentXmlFile(String fileName, String rootResourcePath)
-            throws ParserConfigurationException, SAXException,
-            IOException {
+            throws IOException, XmlParseException {
 
-        InputSource source = new InputSource(getClass().getResourceAsStream(fileName));
-
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        factory.setNamespaceAware(true);
-        factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
-        SAXParser parser = factory.newSAXParser();
-        ContentXmlHandler handler = new ContentXmlHandler(rootResourcePath, new Slf4jLogger());
-        parser.parse(source, handler);
-
-        return handler.getRoot();
+    	try (InputStream input = getClass().getResourceAsStream(fileName)) {
+        	DocViewParser parser = new DocViewParser();
+        	ResourceProxyParserHandler handler = new ResourceProxyParserHandler();
+        	parser.parse(rootResourcePath, new InputSource(input), handler);
+            return handler.getRoot();
+        }
     }
 
     @Test
     @SuppressWarnings("unchecked")
-    public void parseMultiValuedProperties() throws ParserConfigurationException, SAXException, IOException {
+    public void parseMultiValuedProperties() throws IOException, XmlParseException {
 
         Map<String, Object> properties = parseContentXmlFile("multivalued-properties-content.xml", "/").getProperties();
 
@@ -104,8 +102,7 @@ public class ContentXmlHandlerTest {
 
     @Test
     @SuppressWarnings("unchecked")
-    public void parseSingleExplicitMultiValuedProperties() throws ParserConfigurationException, SAXException,
-            IOException {
+    public void parseSingleExplicitMultiValuedProperties() throws IOException, XmlParseException {
 
         Map<String, Object> properties = parseContentXmlFile("single-explicit-multivalued-properties-content.xml", "/")
                 .getProperties();
@@ -126,7 +123,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void parseFullCoverageXmlFile() throws ParserConfigurationException, SAXException, IOException {
+    public void parseFullCoverageXmlFile() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("full-coverage.xml", "/apps/full-coverage");
 
@@ -150,7 +147,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void parseRootContentXml() throws ParserConfigurationException, SAXException, IOException {
+    public void parseRootContentXml() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("root-content.xml", "/");
 
@@ -158,7 +155,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void encodedChildContentXml() throws ParserConfigurationException, SAXException, IOException {
+    public void encodedChildContentXml() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("encoded-child-content.xml", "/ROOT");
 
@@ -166,14 +163,14 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void parseContentXmlWithEscapedNames() throws ParserConfigurationException, SAXException, IOException {
+    public void parseContentXmlWithEscapedNames() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("full-coverage-escaped-names.xml", "/");
         assertThat("node contains /50-50", root.getChildren(), hasChildPath("/50-50"));
     }
 
     @Test
-    public void parseContentXmlWithBinaryProperty() throws ParserConfigurationException, SAXException, IOException {
+    public void parseContentXmlWithBinaryProperty() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("binary-property.xml", "/");
 
@@ -181,7 +178,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void parseContentXmlWithEscapedValues() throws ParserConfigurationException, SAXException, IOException {
+    public void parseContentXmlWithEscapedValues() throws IOException, XmlParseException {
         ResourceProxy root = parseContentXmlFile("escaped-value-in-property.xml", "/");
 
         assertThat(root.getProperties(), hasEntry("property", 
@@ -189,7 +186,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void escapedBraceAtStartOfPropertyValue() throws Exception {
+    public void escapedBraceAtStartOfPropertyValue() throws IOException, XmlParseException {
 
         ResourceProxy root = parseContentXmlFile("escaped-braces-at-start-of-property.xml", "/");
         assertThat("properties[org.apache.sling.commons.log.pattern]",
@@ -198,7 +195,7 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
-    public void escapedCommaInMultiValuedProperty() throws Exception {
+    public void escapedCommaInMultiValuedProperty() throws IOException, XmlParseException {
         
         ResourceProxy root = parseContentXmlFile("escaped-comma-in-multi-valued-property.xml", "/");
         assertThat("properties[someProp]", (String[]) root.getProperties().get("someProp"),
@@ -206,7 +203,7 @@ public class ContentXmlHandlerTest {
     }
     
     @Test
-    public void emptyMultivaluedProperties() throws Exception {
+    public void emptyMultivaluedProperties() throws IOException, XmlParseException {
         
         ResourceProxy root = parseContentXmlFile("empty-multivalued-property.xml", "/");
         
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java
similarity index 100%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/transport/DefaultBatcherTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/transport/DefaultBatcherTest.java
similarity index 100%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/transport/DefaultBatcherTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/transport/DefaultBatcherTest.java
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java b/shared/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java
similarity index 97%
rename from shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java
rename to shared/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java
index c88d8e30..b4d53ae6 100644
--- a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java
+++ b/shared/impl-vlt/src/test/java/org/apache/sling/ide/jcr/RepositoryUtilsTest.java
@@ -19,7 +19,6 @@ package org.apache.sling.ide.jcr;
 import java.net.URISyntaxException;
 
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
-import org.apache.sling.ide.jcr.RepositoryUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-deep.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-deep.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-deep.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-deep.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-default.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-default.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-default.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-default.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-with-include.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-with-include.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-with-include.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/filter/filter-with-include.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/folder.cnd b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/folder.cnd
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/folder.cnd
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/folder.cnd
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/bin.binary b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/bin.binary
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/bin.binary
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/bin.binary
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/binary-property.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/binary-property.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/binary-property.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/binary-property.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/empty-multivalued-property.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/empty-multivalued-property.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/empty-multivalued-property.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/empty-multivalued-property.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/encoded-child-content.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/encoded-child-content.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/encoded-child-content.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/encoded-child-content.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-braces-at-start-of-property.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-braces-at-start-of-property.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-braces-at-start-of-property.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-braces-at-start-of-property.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-comma-in-multi-valued-property.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-comma-in-multi-valued-property.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-comma-in-multi-valued-property.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-comma-in-multi-valued-property.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-value-in-property.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-value-in-property.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-value-in-property.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/escaped-value-in-property.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage-escaped-names.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage-escaped-names.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage-escaped-names.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage-escaped-names.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/multivalued-properties-content.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/multivalued-properties-content.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/multivalued-properties-content.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/multivalued-properties-content.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/root-content.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/root-content.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/root-content.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/root-content.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/simple-content.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/simple-content.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/simple-content.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/simple-content.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml
diff --git a/shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/test-definitions.cnd b/shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/test-definitions.cnd
similarity index 100%
rename from shared/modules/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/test-definitions.cnd
rename to shared/impl-vlt/src/test/resources/org/apache/sling/ide/impl/vlt/test-definitions.cnd
diff --git a/shared/modules/impl-vlt/.options b/shared/modules/impl-vlt/.options
deleted file mode 100644
index 48b2831f..00000000
--- a/shared/modules/impl-vlt/.options
+++ /dev/null
@@ -1,2 +0,0 @@
-org.apache.sling.ide.impl-vlt/debug=false
-org.apache.sling.ide.impl-vlt/debug/console=false
\ No newline at end of file
diff --git a/shared/modules/impl-vlt/plugin.xml b/shared/modules/impl-vlt/plugin.xml
deleted file mode 100644
index 9b79e21c..00000000
--- a/shared/modules/impl-vlt/plugin.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<?eclipse version="3.0"?>
-<plugin>
-    <extension
-         point="org.eclipse.ui.trace.traceComponents">
-      <component
-            id="org.eclipse.ui.trace.tracingPrefPage"
-            label="Sling IDE Tooling">
-         <bundle
-               name="org.apache.sling.ide.impl-vlt"></bundle>
-      </component>
-   </extension>
-</plugin>    
\ No newline at end of file
diff --git a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java b/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
deleted file mode 100644
index 98d0a7f1..00000000
--- a/shared/modules/impl-vlt/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * 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.ide.impl.vlt;
-
-import static org.apache.sling.ide.transport.Repository.CommandExecutionFlag.CREATE_ONLY_WHEN_MISSING;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.concurrent.Callable;
-
-import javax.jcr.Credentials;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Value;
-import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeExistsException;
-
-import org.apache.jackrabbit.commons.cnd.CndImporter;
-import org.apache.jackrabbit.commons.cnd.ParseException;
-import org.apache.jackrabbit.core.TransientRepository;
-import org.apache.sling.ide.filter.Filter;
-import org.apache.sling.ide.filter.FilterResult;
-import org.apache.sling.ide.log.Logger;
-import org.apache.sling.ide.transport.CommandContext;
-import org.apache.sling.ide.transport.ResourceProxy;
-import org.hamcrest.Matchers;
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class AddOrUpdateNodeCommandTest {
-    
-    private static final CommandContext DEFAULT_CONTEXT = new CommandContext(new Filter() {
-        @Override
-        public FilterResult filter(String repositoryPath) {
-            return FilterResult.ALLOW;
-        }
-    });
-
-    private static final String PROP_NAME = "jcr:title";
-
-    private Logger logger = new Slf4jLogger();
-
-    @Test
-    public void setProperty() throws Exception {
-
-        doPropertyChangeTest(null, "Title");
-    }
-
-    private void doPropertyChangeTest(final Object initialPropertyValues, final Object newPropertyValues)
-            throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node contentNode = session().getRootNode().addNode("content");
-                if (initialPropertyValues instanceof String) {
-                    contentNode.setProperty(PROP_NAME, (String) initialPropertyValues);
-                } else if (initialPropertyValues instanceof String[]) {
-                    contentNode.setProperty(PROP_NAME, (String[]) initialPropertyValues);
-                }
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", NodeType.NT_UNSTRUCTURED);
-                if (newPropertyValues != null) {
-                    resource.addProperty(PROP_NAME, newPropertyValues);
-                }
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                if (newPropertyValues == null) {
-                    assertThat(session().getNode("/content").hasProperty(PROP_NAME), equalTo(false));
-                    return null;
-                }
-
-                Property newProp = session().getNode("/content").getProperty(PROP_NAME);
-                if (newPropertyValues instanceof String) {
-                    assertThat("property.isMultiple", newProp.isMultiple(), equalTo(Boolean.FALSE));
-                    assertThat(newProp.getString(), equalTo((String) newPropertyValues));
-
-                } else {
-
-                    String[] expectedValues = (String[]) newPropertyValues;
-                    assertThat("property.isMultiple", newProp.isMultiple(), equalTo(Boolean.TRUE));
-
-                    Value[] values = session().getNode("/content").getProperty(PROP_NAME).getValues();
-
-                    assertThat(values.length, equalTo(expectedValues.length));
-                    for (int i = 0; i < values.length; i++) {
-                        assertThat(values[i].getString(), equalTo(expectedValues[i]));
-                    }
-
-                }
-
-                return null;
-            }
-        });
-
-    }
-
-    @Test
-    public void removeProperty() throws Exception {
-
-        doPropertyChangeTest("Title", null);
-    }
-
-    @Test
-    public void singlePropertyToMultiValued() throws Exception {
-
-        doPropertyChangeTest("Title", new String[] { "Title", "Title 2" });
-    }
-
-    @Test
-    public void multiValuesPropertyToSingle() throws Exception {
-
-        doPropertyChangeTest(new String[] { "Title", "Title 2" }, "Title");
-    }
-
-    @Test
-    public void changeNtFolderToSlingFolderWithAddedProperty() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                session().getRootNode().addNode("content", "nt:folder");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "sling:Folder");
-                resource.getProperties().put("newProperty", "some/value");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                Node content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("sling:Folder"));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    public void changeSlingFolderToNtFolderWithExistingProperty() throws Exception {
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "sling:Folder");
-                content.setProperty("newProperty", "some/value");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "nt:folder");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:folder"));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    @Ignore("SLING-4036")
-    public void updateNtUnstructuredToNodeWithRequiredProperty() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "nt:unstructured");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "custom");
-                resource.getProperties().put("attribute", "some value");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("custom"));
-
-                return null;
-            }
-        });
-    }
-    
-    @Test
-    public void nodeNotPresentButOutsideOfFilterIsNotRemoved() throws Exception {
-
-        final CommandContext context = new CommandContext(new Filter() {
-            
-            @Override
-            public FilterResult filter(String repositoryPath) {
-                if ( repositoryPath.equals("/content/not-included-child")) {
-                    return FilterResult.DENY;
-                }
-                
-                return FilterResult.ALLOW;
-            }
-        });
-        
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "nt:unstructured");
-                content.addNode("included-child");
-                content.addNode("not-included-child");
-                
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "nt:unstructured");
-                resource.addChild(newResource("/content/included-child", "nt:unstructured"));
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), context, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                content.getNode("included-child");
-                content.getNode("not-included-child");
-                return null;
-            }
-        });
-        
-    }
-
-    private ResourceProxy newResource(String path, String primaryType) {
-
-        ResourceProxy resource = new ResourceProxy(path);
-        resource.addProperty("jcr:primaryType", primaryType);
-        return resource;
-    }
-
-    @Test
-    public void createIfRequiredFlagSkipsExistingResources() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "nt:folder");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "nt:unstructured");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
-                        CREATE_ONLY_WHEN_MISSING);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:folder"));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    public void createIfRequiredFlagCreatesNeededResources() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                ResourceProxy resource = newResource("/content", "nt:unstructured");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
-                        CREATE_ONLY_WHEN_MISSING);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                Node content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:unstructured"));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    public void createIfRequiredFlagCreatesNeededResourcesEvenWhenPrimaryTypeIsMissing() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                ResourceProxy resource = new ResourceProxy("/content");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
-                        CREATE_ONLY_WHEN_MISSING);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                Node content = session().getRootNode().getNode("content");
-                assertThat(content.getPrimaryNodeType().getName(), equalTo("nt:unstructured"));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    public void autoCreatedPropertiesAreNotRemoved() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "nt:folder");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "nt:folder");
-                resource.addProperty("jcr:mixinTypes", "mix:lastModified");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-                cmd.execute().get(); // second time since mixins are processed after properties so we need two
-                                     // executions to
-                                     // expose the problem
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                assertThat("jcr:lastModified property not present", content.hasProperty("jcr:lastModified"),
-                        equalTo(true));
-                assertThat("jcr:lastModifiedBy property not present", content.hasProperty("jcr:lastModifiedBy"),
-                        equalTo(true));
-
-                return null;
-            }
-        });
-    }
-
-    @Test
-    public void autoCreatedPropertiesAreUpdatedIfPresent() throws Exception {
-
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                Node content = session().getRootNode().addNode("content", "nt:folder");
-
-                session().save();
-
-                ResourceProxy resource = newResource("/content", "nt:folder");
-                resource.addProperty("jcr:mixinTypes", "mix:lastModified");
-                resource.addProperty("jcr:lastModifiedBy", "admin2");
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-                cmd.execute().get(); // second time since mixins are processed after properties so we need two
-                                     // executions to
-                                     // expose the problem
-
-                session().refresh(false);
-
-                content = session().getRootNode().getNode("content");
-                assertThat("jcr:lastModifiedBy property not modified", content.getProperty("jcr:lastModifiedBy")
-                        .getString(), equalTo("admin2"));
-
-                return null;
-            }
-        });
-    }
-    
-    @Test
-    public void setEmptyMixinTypes() throws Exception {
-        setMixinTypes0();
-    }
-    
-    private void setMixinTypes0(final String... mixinTypeNames) throws Exception {
-        
-        doWithTransientRepository(new CallableWithSession() {
-            @Override
-            public Void call() throws Exception {
-                ResourceProxy resource = newResource("/content", "nt:unstructured");
-                resource.addProperty("jcr:mixinTypes", mixinTypeNames);
-
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
-                cmd.execute().get();
-
-                session().refresh(false);
-
-                Node content = session().getRootNode().getNode("content");
-                assertThat(content.getMixinNodeTypes(), Matchers.arrayWithSize(mixinTypeNames.length));
-
-                return null;
-            }
-        });        
-    }
-
-    @Test
-    public void setMixinTypes() throws Exception {
-        
-        setMixinTypes0("mix:created");
-    }
-
-    private void doWithTransientRepository(CallableWithSession callable) throws Exception {
-
-        File out = new File(new File("target"), "jackrabbit");
-        TransientRepository repo = new TransientRepository(new File(out, "repository.xml"), new File(out, "repository"));
-        SimpleCredentials credentials = new SimpleCredentials("admin", "admin".toCharArray());
-        Session session = repo.login(credentials);
-
-        importNodeTypeDefinitions(session, "test-definitions.cnd");
-        importNodeTypeDefinitions(session, "folder.cnd");
-
-        try {
-            callable.setCredentials(credentials);
-            callable.setSession(session);
-            callable.call();
-        } finally {
-            if (session.itemExists("/content"))
-                session.removeItem("/content");
-            session.save();
-            session.logout();
-        }
-
-    }
-
-    private void importNodeTypeDefinitions(Session session, String cndFile) throws InvalidNodeTypeDefinitionException,
-            NodeTypeExistsException, UnsupportedRepositoryOperationException, ParseException, RepositoryException,
-            IOException {
-        try ( InputStream cndInput = getClass().getResourceAsStream(cndFile) ) {
-            if (cndInput == null) {
-                throw new IllegalArgumentException("Unable to read classpath resource " + cndFile);
-            }
-            CndImporter.registerNodeTypes(new InputStreamReader(cndInput), session);
-        }
-    }
-
-    private static abstract class CallableWithSession implements Callable<Void> {
-
-        private Session session;
-        private Credentials credentials;
-
-        public void setSession(Session session) {
-
-            this.session = session;
-        }
-
-        public void setCredentials(Credentials credentials) {
-
-            this.credentials = credentials;
-        }
-
-        protected Session session() {
-
-            if (session == null)
-                throw new IllegalStateException("session is null");
-
-            return session;
-        }
-
-        protected Credentials credentials() {
-
-            if (credentials == null)
-                throw new IllegalStateException("credentials is null");
-
-            return credentials;
-        }
-
-        protected Repository repo() {
-
-            return session().getRepository();
-        }
-    }
-}
diff --git a/shared/modules/parent/pom.xml b/shared/modules/parent/pom.xml
deleted file mode 100644
index 02c84acf..00000000
--- a/shared/modules/parent/pom.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.sling</groupId>
-        <artifactId>sling</artifactId>
-        <version>33</version>
-        <relativePath />
-    </parent>
-
-    <groupId>org.apache.sling.ide</groupId>
-    <artifactId>sling-ide-shared-parent</artifactId>
-    <packaging>pom</packaging>
-    <version>1.2.3-SNAPSHOT</version>
-
-    <name>Apache Sling IDE - Shared Modules Parent</name>
-
-    <scm>
-        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
-        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
-        <url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
-    </scm>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>**/MANIFEST.MF</exclude>
-                        <exclude>**/OSGI-INF/*.xml</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <version>3.1.0</version>
-                </plugin>
-                <plugin>
-                    <!-- TODO: consolidate once sling-parent 35 is released, because most properties are set correctly there -->
-                    <groupId>biz.aQute.bnd</groupId>
-                    <artifactId>bnd-maven-plugin</artifactId>
-                    <version>4.1.0</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>bnd-process</goal>
-                            </goals>
-                            <configuration>
-                                <!-- default OSGi headers (mainly for usage within Eclipse) -->
-                                <bnd><![CDATA[
-Bundle-Category: sling
-
-Bundle-Description: "${project.description}"
-
-Bundle-DocURL: https://sling.apache.org/documentation/development/ide-tooling.html
-
-Bundle-License: Apache License, Version 2.0
-
-Bundle-Vendor: The Apache Software Foundation
-
-Bundle-SCM: url=${project.scm.url},connection=${project.scm.connection},developer-connection=${project.scm.developerConnection},tag=${project.scm.tag}
-
-# export all versioned packages by default
--exportcontents: ${packages;VERSIONED}
-
-# overwrite timestamp format used as qualifier for snapshots to make the resolution higher (i.e. make them differ for each build), 
-# compare with https://www.mail-archive.com/dev@sling.apache.org/msg76177.html
--snapshot: ${tstamp;yyyyMMddHHmmssSSS}
-
-Bundle-ActivationPolicy: lazy
-                                ]]></bnd>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>m2e</id>
-            <!-- This profile is only activated when building in Eclipse 
-                with m2e -->
-            <activation>
-                <property>
-                    <name>m2e.version</name>
-                </property>
-            </activation>
-            <build>
-                <!-- as currently PDE cannot deal with the MANIFEST.MF in the target folder
-                https://bugs.eclipse.org/bugs/show_bug.cgi?id=533263 copy both 
-                Manifest and component descriptors to the project's root -->
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-clean-plugin</artifactId>
-                        <configuration>
-                            <filesets>
-                                <fileset>
-                                    <directory>META-INF</directory>
-                                    <includes>
-                                        <include>*</include>
-                                    </includes>
-                                </fileset>
-                                <fileset>
-                                    <directory>OSGI-INF</directory>
-                                    <includes>
-                                        <include>*</include>
-                                    </includes>
-                                </fileset>
-                            </filesets>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-resources-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>copy-manifest-for-pde</id>
-                                <phase>process-test-resources</phase>
-                                <goals>
-                                    <goal>copy-resources</goal>
-                                </goals>
-                                <configuration>
-                                    <overwrite>true</overwrite>
-                                    <outputDirectory>META-INF</outputDirectory>
-                                    <resources>
-                                        <resource>
-                                            <directory>${project.build.outputDirectory}/META-INF</directory>
-                                            <includes>
-                                                <include>MANIFEST.MF</include>
-                                            </includes>
-                                        </resource>
-                                    </resources>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>copy-scr-descriptors-for-pde</id>
-                                <phase>process-test-resources</phase>
-                                <goals>
-                                    <goal>copy-resources</goal>
-                                </goals>
-                                <configuration>
-                                    <outputDirectory>OSGI-INF</outputDirectory>
-                                    <resources>
-                                        <resource>
-                                            <directory>${project.build.outputDirectory}/OSGI-INF</directory>
-                                            <includes>
-                                                <include>*.xml</include>
-                                            </includes>
-                                        </resource>
-                                    </resources>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-</project>
diff --git a/shared/p2/pom.xml b/shared/p2/pom.xml
deleted file mode 100644
index edf358f0..00000000
--- a/shared/p2/pom.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>14</version>
-    </parent>
-    <groupId>org.apache.sling</groupId>
-    <artifactId>sling-ide-tooling-p2</artifactId>
-    <version>1.2.3-SNAPSHOT</version>
-    <packaging>pom</packaging>
-    <name>Apache Sling IDE Tools - P2 packaging</name>
-    <url>http://sling.apache.org</url>
-
-    <scm>
-        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
-        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
-        <url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
-    </scm>
-
-    <modules>
-        <module>vlt-wrapper</module>
-        <module>shared-feature</module>
-        <module>shared-repository</module>
-    </modules>
-
-    <repositories>
-        <repository>
-            <id>luna</id>
-            <layout>p2</layout>
-            <url>https://download.eclipse.org/releases/oxygen</url>
-        </repository>
-        <repository>
-            <id>orbit</id>
-            <layout>p2</layout>
-            <url>https://download.eclipse.org/tools/orbit/downloads/drops/R20170516192513/repository</url>
-        </repository>    
-    </repositories>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.eclipse.tycho</groupId>
-                <artifactId>tycho-maven-plugin</artifactId>
-                <version>${tycho.version}</version>
-                <extensions>true</extensions>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.tycho</groupId>
-                <artifactId>target-platform-configuration</artifactId>
-                <version>${tycho.version}</version>
-                <configuration>
-                    <resolver>p2</resolver>
-                    <pomDependencies>consider</pomDependencies>
-                    <!-- <target> <artifact> <groupId>${project.groupId}</groupId> 
-                        <artifactId>org.apache.sling.ide.target-definition</artifactId> <version>${project.version}</version> 
-                        </artifact> </target> -->
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.tycho</groupId>
-                <artifactId>tycho-versions-plugin</artifactId>
-                <version>${tycho.version}</version>
-            </plugin>
-            <!-- <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>ianal-maven-plugin</artifactId> 
-                <version>1.0-alpha-1</version> <executions> <execution> <goals> <goal>verify-legal-files</goal> 
-                </goals> <configuration> <strict>true</strict> </configuration> </execution> 
-                </executions> </plugin> -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>derby.log</exclude>
-                        <exclude>.gitignore</exclude>
-                        <exclude>README.md</exclude>
-
-                        <!-- Eclipse build related files -->
-                        <exclude>*.launch</exclude>
-                        <exclude>build.properties</exclude>
-                        <exclude>.options</exclude>
-                        <exclude>META-INF/MANIFEST.MF</exclude>
-
-                        <!-- test data -->
-                        <exclude>**/*.binary</exclude>
-
-                        <!-- prevent failures when eclipse-test is not activated 
-                            as a submodule -->
-                        <exclude>eclipse-test/**</exclude>
-                        <!-- exclude target file from the source-bundle project 
-                            since it is not a module -->
-                        <exclude>source-bundle/target/**</exclude>
-                        <exclude>source-bundle/README.md</exclude>
-
-                        <!-- Jenkins Xvfb plugin -->
-                        <exclude>.Xauthority-*</exclude>
-                    </excludes>
-                </configuration>
-                <!-- <executions> <execution> <goals> <goal>check</goal> 
-                    </goals> <phase>verify</phase> </execution> </executions> -->
-            </plugin>
-        </plugins>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.1</version>
-                    <configuration>
-                        <source>1.7</source>
-                        <target>1.7</target>
-                    </configuration>
-                </plugin>
-                <!--This plugin's configuration is used to store Eclipse 
-                    m2e settings only. It has no influence on the Maven build itself. -->
-                <!-- We embed some bundles that are not available on p2 update 
-                    sites. To make the build seamless, we copy them early in the process. -->
-                <plugin>
-                    <groupId>org.eclipse.m2e</groupId>
-                    <artifactId>lifecycle-mapping</artifactId>
-                    <version>1.0.0</version>
-                    <configuration>
-                        <lifecycleMappingMetadata>
-                            <pluginExecutions>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>
-                                            org.apache.maven.plugins
-                                        </groupId>
-                                        <artifactId>
-                                            maven-dependency-plugin
-                                        </artifactId>
-                                        <versionRange>
-                                            [2.8,)
-                                        </versionRange>
-                                        <goals>
-                                            <goal>copy</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore></ignore>
-                                    </action>
-                                </pluginExecution>
-                            </pluginExecutions>
-                        </lifecycleMappingMetadata>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-    <properties>
-        <tycho.version>1.0.0</tycho.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-</project>
diff --git a/shared/p2/shared-feature/build.properties b/shared/p2/shared-feature/build.properties
deleted file mode 100644
index 64f93a9f..00000000
--- a/shared/p2/shared-feature/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-bin.includes = feature.xml
diff --git a/shared/p2/shared-feature/feature.xml b/shared/p2/shared-feature/feature.xml
deleted file mode 100644
index 1d0a0e46..00000000
--- a/shared/p2/shared-feature/feature.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<feature
-      id="org.apache.sling.ide.shared.feature"
-      label="Sling IDE Tools - Shared"
-      version="1.2.3.qualifier"
-      provider-name="The Apache Software Foundation">
-
-   <license url="http://www.apache.org/licenses/LICENSE-2.0">
-      Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      &quot;control&quot; means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      &quot;Source&quot; form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      &quot;Object&quot; form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      &quot;Work&quot; shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      &quot;Contribution&quot; shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;
-
-      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
-      replaced with your own identifying information. (Don&apos;t include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same &quot;printed page&quot; as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-   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 &quot;AS IS&quot; 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.
-   </license>
-
-   <plugin
-         id="org.apache.sling.ide.api"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.sling.ide.impl-vlt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.sling.ide.artifacts"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.sling.ide.vlt-wrapper"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-</feature>
-
diff --git a/shared/p2/shared-feature/pom.xml b/shared/p2/shared-feature/pom.xml
deleted file mode 100644
index a22ba751..00000000
--- a/shared/p2/shared-feature/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.sling</groupId>
-    <artifactId>sling-ide-tooling-p2</artifactId>
-    <version>1.2.3-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>org.apache.sling.ide.shared.feature</artifactId>
-  <packaging>eclipse-feature</packaging>
-
-  <name>Apache Sling IDE Tooling Shared Features</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.impl-vlt</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.artifacts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.vlt-wrapper</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-   </dependencies>
-
-</project>
diff --git a/shared/p2/shared-repository/category.xml b/shared/p2/shared-repository/category.xml
deleted file mode 100644
index 242fa409..00000000
--- a/shared/p2/shared-repository/category.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<site>
-   <feature url="features/org.apache.sling.ide.shared.feature_0.0.0.qualifier.jar" id="org.apache.sling.ide.shared.feature" version="0.0.0">
-      <category name="sling"/>
-   </feature>
-   <category-def name="sling" label="Sling"/>
-</site>
diff --git a/shared/p2/shared-repository/pom.xml b/shared/p2/shared-repository/pom.xml
deleted file mode 100644
index 073a3638..00000000
--- a/shared/p2/shared-repository/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.sling</groupId>
-    <artifactId>sling-ide-tooling-p2</artifactId>
-    <version>1.2.3-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>org.apache.sling.ide.shared.repository</artifactId>
-  <packaging>eclipse-repository</packaging>
-
-  <name>Apache Sling IDE Tooling Shared Features P2 repository</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.vlt-wrapper</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.impl-vlt</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.sling.ide</groupId>
-      <artifactId>org.apache.sling.ide.artifacts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-   </dependencies>
-
-</project>
diff --git a/shared/p2/vlt-wrapper/META-INF/LICENSE b/shared/p2/vlt-wrapper/META-INF/LICENSE
deleted file mode 100644
index d6456956..00000000
--- a/shared/p2/vlt-wrapper/META-INF/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/shared/p2/vlt-wrapper/META-INF/MANIFEST.MF b/shared/p2/vlt-wrapper/META-INF/MANIFEST.MF
deleted file mode 100644
index b2dc0f14..00000000
--- a/shared/p2/vlt-wrapper/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,75 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Name: Sling IDE Vlt Wrapper
-Bundle-SymbolicName: org.apache.sling.ide.vlt-wrapper
-Bundle-Version: 1.2.3.qualifier
-Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Bundle-ClassPath: .,
- lib/org.apache.jackrabbit.vault-3.2.8.jar,
- lib/vault-davex-3.2.8.jar,
- lib/jcr-2.0.jar,
- lib/guava-15.0.jar,
- lib/jackrabbit-api-2.16.3.jar,
- lib/jackrabbit-spi2dav-2.16.3.jar,
- lib/jackrabbit-spi-2.16.3.jar,
- lib/jackrabbit-jcr-client-2.16.3.jar,
- lib/jackrabbit-jcr2spi-2.16.3.jar,
- lib/jackrabbit-jcr-commons-2.16.3.jar,
- lib/jackrabbit-spi-commons-2.16.3.jar,
- lib/jackrabbit-webdav-2.16.3.jar,
- lib/httpmime-4.5.3.jar,
- lib/httpclient-4.5.3.jar,
- lib/httpcore-4.4.6.jar
-Export-Package: javax.jcr;version="2.0.0",
- javax.jcr.nodetype;version="2.0.0",
- javax.jcr.lock;version="2.0.0",
- javax.jcr.observation;version="2.0.0",
- javax.jcr.query;version="2.0.0",
- javax.jcr.query.qom;version="2.0.0",
- javax.jcr.retention;version="2.0.0",
- javax.jcr.security;version="2.0.0",
- javax.jcr.util;version="2.0.0",
- javax.jcr.version;version="2.0.0",
- org.apache.jackrabbit.api;version="2.16.0",
- org.apache.jackrabbit.api.management;version="2.16.0",
- org.apache.jackrabbit.api.security;version="2.16.0",
- org.apache.jackrabbit.api.security.authorization;version="2.16.0", 
- org.apache.jackrabbit.api.security.principal;version="2.16.0", 
- org.apache.jackrabbit.api.security.user;version="2.16.0", 
- org.apache.jackrabbit.spi.commons.conversion;version="2.16.0",
- org.apache.jackrabbit.spi.commons.namespace;version="2.16.0",
- org.apache.jackrabbit.util;version="2.16.0",
- org.apache.jackrabbit.vault.davex;version="2.4.0",
- org.apache.jackrabbit.vault.fs;version="2.4.0",
- org.apache.jackrabbit.vault.fs.api;version="2.6.0",
- org.apache.jackrabbit.vault.fs.config;version="2.5.0",
- org.apache.jackrabbit.vault.fs.filter;version="2.4.0",
- org.apache.jackrabbit.vault.fs.impl;version="2.4.0",
- org.apache.jackrabbit.vault.fs.impl.aggregator;version="2.4.0",
- org.apache.jackrabbit.vault.fs.impl.io;version="2.4.0",
- org.apache.jackrabbit.vault.fs.impl.io.legacycnd;version="2.4.0",
- org.apache.jackrabbit.vault.fs.io;version="2.4.0",
- org.apache.jackrabbit.vault.fs.spi;version="2.4.0",
- org.apache.jackrabbit.vault.fs.spi.impl.jcr20;version="2.4.0",
- org.apache.jackrabbit.vault.packaging;version="2.4.0",
- org.apache.jackrabbit.vault.packaging.impl;version="2.4.0",
- org.apache.jackrabbit.vault.util;version="2.4.0",
- org.apache.jackrabbit.vault.util.xml.serialize;version="2.4.0",
- org.apache.jackrabbit.vault.util.xml.xerces.dom;version="2.4.0",
- org.apache.jackrabbit.vault.util.xml.xerces.util;version="2.4.0",
- org.apache.jackrabbit.vault.util.xml.xerces.xni;version="2.4.0",
- org.apache.jackrabbit.vault.util.xml.xerces.xni.parser;version="2.4.0"
-Require-Bundle: org.eclipse.core.runtime
-Import-Package: org.apache.commons.collections,
- org.apache.commons.collections.map,
- org.apache.commons.collections.list,
- org.apache.commons.collections.iterators,
- org.apache.commons.logging,
- org.apache.commons.codec,
- org.apache.commons.codec.binary,
- org.apache.commons.io,
- org.apache.commons.io.output,
- org.osgi.framework,
- org.slf4j
diff --git a/shared/p2/vlt-wrapper/META-INF/NOTICE b/shared/p2/vlt-wrapper/META-INF/NOTICE
deleted file mode 100644
index 45dda0c5..00000000
--- a/shared/p2/vlt-wrapper/META-INF/NOTICE
+++ /dev/null
@@ -1,11 +0,0 @@
-
-Sling IDE Tools: FileVault wrapper
-Copyright 2007-2014 The Apache Software Foundation
-
-Apache Sling is based on source code originally developed 
-by Day Software (http://www.day.com/).
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
diff --git a/shared/p2/vlt-wrapper/README.md b/shared/p2/vlt-wrapper/README.md
deleted file mode 100644
index 16632dbc..00000000
--- a/shared/p2/vlt-wrapper/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Apache Sling IDE Tools FileVault wrapper
-
-This module is part of the [Apache Sling](https://sling.apache.org) project.
diff --git a/shared/p2/vlt-wrapper/build.properties b/shared/p2/vlt-wrapper/build.properties
deleted file mode 100644
index 82f46e0b..00000000
--- a/shared/p2/vlt-wrapper/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               lib/org.apache.jackrabbit.vault-3.2.8.jar,\
-               lib/vault-davex-3.2.8.jar,\
-               lib/jcr-2.0.jar,\
-               lib/guava-15.0.jar,\
-               lib/jackrabbit-api-2.16.3.jar,\
-               lib/jackrabbit-spi2dav-2.16.3.jar,\
-               lib/jackrabbit-spi-2.16.3.jar,\
-               lib/jackrabbit-jcr-client-2.16.3.jar,\
-               lib/jackrabbit-jcr2spi-2.16.3.jar,\
-               lib/jackrabbit-jcr-commons-2.16.3.jar,\
-               lib/jackrabbit-spi-commons-2.16.3.jar,\
-               lib/jackrabbit-webdav-2.16.3.jar,\
-               lib/httpmime-4.5.3.jar,\
-               lib/httpclient-4.5.3.jar,\
-               lib/httpcore-4.4.6.jar
diff --git a/shared/p2/vlt-wrapper/lib/.gitignore b/shared/p2/vlt-wrapper/lib/.gitignore
deleted file mode 100644
index f23b9489..00000000
--- a/shared/p2/vlt-wrapper/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jar
\ No newline at end of file
diff --git a/shared/p2/vlt-wrapper/pom.xml b/shared/p2/vlt-wrapper/pom.xml
deleted file mode 100644
index 0cdbc577..00000000
--- a/shared/p2/vlt-wrapper/pom.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.sling</groupId>
-        <artifactId>sling-ide-tooling-p2</artifactId>
-        <version>1.2.3-SNAPSHOT</version>
-    </parent>
-    <groupId>org.apache.sling.ide</groupId>
-    <artifactId>org.apache.sling.ide.vlt-wrapper</artifactId>
-    <packaging>eclipse-plugin</packaging>
-    <name>Apache Sling IDE Tools FileVault wrapper</name>
-
-    <scm>
-        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
-        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
-        <url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
-    </scm>
-    <build>
-        <!-- ensure that extra files are picked up by the maven-source-plugin -->
-        <resources>
-            <resource>
-                <directory>.</directory>
-                <includes>
-                    <include>build.properties</include>
-                    <include>META-INF/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-clean-plugin</artifactId>
-                <configuration>
-                    <filesets>
-                        <fileset>
-                            <directory>lib</directory>
-                            <includes>
-                                <include>**/*.jar</include>
-                            </includes>
-                        </fileset>
-                    </filesets>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <configuration>
-                    <artifactItems>
-                        <!-- START JCR dependencies -->
-                        <artifactItem>
-                            <groupId>javax.jcr</groupId>
-                            <artifactId>jcr</artifactId>
-                            <version>2.0</version>
-                        </artifactItem>
-                        <!-- END JCR dependencies -->
-
-                        <!-- START Apache Jackrabbit dependencies -->
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-api</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-webdav</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-spi-commons</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-jcr-commons</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <!-- transitive dependency of jackrabbit-jcr-commons -->
-                        <artifactItem>
-                            <groupId>com.google.guava</groupId>
-                            <artifactId>guava</artifactId>
-                            <version>15.0</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-jcr2spi</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-jcr-client</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-spi</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit</groupId>
-                            <artifactId>jackrabbit-spi2dav</artifactId>
-                            <version>${jackrabbit.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.httpcomponents</groupId>
-                            <artifactId>httpmime</artifactId>
-                            <version>4.5.3</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.httpcomponents</groupId>
-                            <artifactId>httpclient</artifactId>
-                            <version>4.5.3</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.httpcomponents</groupId>
-                            <artifactId>httpcore</artifactId>
-                            <version>4.4.6</version>
-                        </artifactItem>
-                        <!-- END Apache Jackrabbit dependencies -->
-
-                        <!-- START Apache Jackrabbit FileVault dependencies -->
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit.vault</groupId>
-                            <artifactId>vault-davex</artifactId>
-                            <version>${vault.version}</version>
-                        </artifactItem>
-                        <artifactItem>
-                            <groupId>org.apache.jackrabbit.vault</groupId>
-                            <artifactId>org.apache.jackrabbit.vault</artifactId>
-                            <version>${vault.version}</version>
-                        </artifactItem>
-                        <!-- END Apache Jackrabbit FileVault dependencies -->
-
-                    </artifactItems>
-                    <outputDirectory>lib</outputDirectory>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>copy</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <properties>
-        <!-- must match the version being referenced in the pom.xml of filevault -->
-        <jackrabbit.version>2.16.3</jackrabbit.version>
-        <vault.version>3.2.8</vault.version>
-    </properties>
-</project>
diff --git a/shared/modules/parent/.project b/shared/parent/.project
similarity index 100%
rename from shared/modules/parent/.project
rename to shared/parent/.project
diff --git a/shared/parent/pom.xml b/shared/parent/pom.xml
new file mode 100644
index 00000000..77c02cd8
--- /dev/null
+++ b/shared/parent/pom.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling-bundle-parent</artifactId>
+        <version>49</version>
+        <relativePath />
+    </parent>
+
+    <groupId>org.apache.sling.ide</groupId>
+    <artifactId>sling-ide-shared-parent</artifactId>
+    <packaging>pom</packaging>
+    <version>1.2.3-SNAPSHOT</version>
+
+    <name>Apache Sling IDE - Shared Modules Parent</name>
+
+    <scm>
+        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</connection>
+        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-ide-tooling.git</developerConnection>
+        <url>https://gitbox.apache.org/repos/asf?p=sling-ide-tooling.git</url>
+    </scm>
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>biz.aQute.bnd</groupId>
+                    <artifactId>bnd-baseline-maven-plugin</artifactId>
+                    <configuration>
+                        <failOnMissing>false</failOnMissing><!-- no release yet -->
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>**/MANIFEST.MF</exclude>
+                        <exclude>**/OSGI-INF/*.xml</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencyManagement>
+    	<dependencies>
+    		<!-- START JCR dependencies -->
+		<dependency>
+			<groupId>javax.jcr</groupId>
+			<artifactId>jcr</artifactId>
+			<version>2.0</version>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END JCR dependencies -->
+
+		<!-- START Apache Jackrabbit dependencies -->
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>oak-jackrabbit-api</artifactId>
+			<version>${oak.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-webdav</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi-commons</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-commons</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr2spi</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-client</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-spi2dav</artifactId>
+			<version>${jackrabbit.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.5.8</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpmime</artifactId>
+			<version>4.5.8</version>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END Apache Jackrabbit dependencies -->
+
+		<!-- START Apache Jackrabbit FileVault dependencies -->
+		<dependency>
+			<groupId>org.apache.jackrabbit.vault</groupId>
+			<artifactId>vault-davex</artifactId>
+			<version>${vault.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.jackrabbit.vault</groupId>
+			<artifactId>org.apache.jackrabbit.vault</artifactId>
+			<version>${vault.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<!-- END Apache Jackrabbit FileVault dependencies -->
+    	</dependencies>
+    </dependencyManagement>
+    
+    <properties>
+		<sling.java.version>8</sling.java.version>
+		<!-- must match the version being referenced in the pom.xml of filevault -->
+		<jackrabbit.version>2.20.6</jackrabbit.version>
+        <oak.version>1.42.0</oak.version>
+		<vault.version>3.6.4</vault.version>
+    </properties>
+</project>
diff --git a/shared/modules/pom.xml b/shared/pom.xml
similarity index 92%
rename from shared/modules/pom.xml
rename to shared/pom.xml
index 1be41e5d..613a4d4b 100644
--- a/shared/modules/pom.xml
+++ b/shared/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache</groupId>
         <artifactId>apache</artifactId>
-        <version>14</version>
+        <version>27</version>
     </parent>
     <groupId>org.apache.sling.ide</groupId>
     <artifactId>sling-ide-tooling-shared</artifactId>
@@ -39,5 +39,10 @@
         <module>impl-vlt</module>
         <module>artifacts</module>
         <module>sync-fs</module>
+        <module>filevault-uber-jar</module>
     </modules>
+    
+    <properties>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>
 </project>
diff --git a/shared/modules/sync-fs/.project b/shared/sync-fs/.project
similarity index 72%
rename from shared/modules/sync-fs/.project
rename to shared/sync-fs/.project
index 4c63d87a..ba16487c 100644
--- a/shared/modules/sync-fs/.project
+++ b/shared/sync-fs/.project
@@ -10,16 +10,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
diff --git a/shared/modules/sync-fs/bnd.bnd b/shared/sync-fs/bnd.bnd
similarity index 100%
rename from shared/modules/sync-fs/bnd.bnd
rename to shared/sync-fs/bnd.bnd
diff --git a/shared/modules/sync-fs/pom.xml b/shared/sync-fs/pom.xml
similarity index 97%
rename from shared/modules/sync-fs/pom.xml
rename to shared/sync-fs/pom.xml
index ce5177b2..c8ae58c6 100644
--- a/shared/modules/sync-fs/pom.xml
+++ b/shared/sync-fs/pom.xml
@@ -44,10 +44,12 @@
             <groupId>org.apache.sling.ide</groupId>
             <artifactId>org.apache.sling.ide.api</artifactId>
             <version>${project.version}</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -57,6 +59,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.hamcrest</groupId>
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/FSResources.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/FSResources.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/FSResources.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/FSResources.java
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectory.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectory.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectory.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectory.java
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFile.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFile.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFile.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFile.java
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProject.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProject.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProject.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProject.java
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceResource.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceResource.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceResource.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceResource.java
diff --git a/shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/package-info.java b/shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/package-info.java
similarity index 100%
rename from shared/modules/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/package-info.java
rename to shared/sync-fs/src/main/java/org/apache/sling/ide/content/sync/fs/package-info.java
diff --git a/shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectoryTest.java b/shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectoryTest.java
similarity index 100%
rename from shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectoryTest.java
rename to shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceDirectoryTest.java
diff --git a/shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFileTest.java b/shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFileTest.java
similarity index 100%
rename from shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFileTest.java
rename to shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceFileTest.java
diff --git a/shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProjectTest.java b/shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProjectTest.java
similarity index 100%
rename from shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProjectTest.java
rename to shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/FSWorkspaceProjectTest.java
diff --git a/shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/MockFilterLocator.java b/shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/MockFilterLocator.java
similarity index 100%
rename from shared/modules/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/MockFilterLocator.java
rename to shared/sync-fs/src/test/java/org/apache/sling/ide/content/sync/fs/impl/MockFilterLocator.java