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:21 UTC

[sling-ide-tooling] branch feature/m2e-2.x-compatibility created (now ff37dc8c)

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

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


      at ff37dc8c SLING-11590 Make compatible with m2e 2.x

This branch includes the following new commits:

     new ff37dc8c SLING-11590 Make compatible with m2e 2.x

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by kw...@apache.org.
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