diff --git a/CONTRIBUTING b/CONTRIBUTING
new file mode 100644
index 0000000..3be272f
--- /dev/null
+++ b/CONTRIBUTING
@@ -0,0 +1,51 @@
+# Contributing to Edapt
+
+Thanks for your interest in this project.
+
+## Project description
+
+Eclipse Edapt defines APIs and provides implementations for the following
+functionality:
+
+* https://projects.eclipse.org/projects/modeling.edapt
+
+## Developer resources
+
+Information regarding source code management, builds, coding standards, and
+more.
+
+* https://projects.eclipse.org/projects/modeling.edapt/developer
+
+The project maintains the following source code repositories
+
+* http://git.eclipse.org/c/edapt/org.eclipse.emf.edapt.git
+
+This project uses Bugzilla to track ongoing development and issues.
+
+* Search for issues: https://eclipse.org/bugs/buglist.cgi?product=Edapt
+* Create a new report: https://eclipse.org/bugs/enter_bug.cgi?product=Edapt
+
+Be sure to search for existing bugs before you create another one. Remember that
+contributions are always welcome!
+
+## Eclipse Contributor Agreement
+
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+* http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+* https://dev.eclipse.org/mailman/listinfo/emft-dev
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..0a90386
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,210 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+   1. DEFINITIONS
+
+   "Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+         i) changes to the Program, and
+
+         ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from
+a Contributor if it was added to the Program by such Contributor itself or
+anyone acting on such Contributor's behalf. Contributions do not include additions
+to the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are
+not derivative works of the Program.
+
+   "Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including
+all Contributors.
+
+   2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce,
+prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative
+works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and
+the Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered by
+the Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses
+to its Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth
+in this Agreement.
+
+   3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages,
+such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor,
+and informs licensees how to obtain it in a reasonable manner on or through
+a medium customarily used for software exchange.
+
+   When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+   4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor
+who includes the Program in a commercial product offering should do so in
+a manner which does not create potential liability for other Contributors.
+Therefore, if a Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor
+to the extent caused by the acts or omissions of such Commercial Contributor
+in connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense
+and any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial
+Contributor's responsibility alone. Under this section, the Commercial Contributor
+would have to defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other Contributor
+to pay any damages as a result, the Commercial Contributor must pay those
+damages.
+
+   5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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.
+Each Recipient is solely responsible for determining the appropriateness of
+using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement, including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage
+to or loss of data, programs or equipment, and unavailability or interruption
+of operations.
+
+   6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+   7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of
+the terms of this Agreement, and without further action by the parties hereto,
+such provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware) infringes
+such Recipient's patent(s), then such Recipient's rights granted under Section
+2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and
+does not cure such failure in a reasonable period of time after becoming aware
+of such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as reasonably
+practicable. However, Recipient's obligations under this Agreement and any
+licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but
+in order to avoid inconsistency the Agreement is copyrighted and may only
+be modified in the following manner. The Agreement Steward reserves the right
+to publish new versions (including revisions) of this Agreement from time
+to time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse
+Foundation may assign the responsibility to serve as the Agreement Steward
+to a suitable separate entity. Each new version of the Agreement will be given
+a distinguishing version number. The Program (including Contributions) may
+always be distributed subject to the version of the Agreement under which
+it was received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property
+of any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual
+property laws of the United States of America. No party to this Agreement
+will bring a legal action under this Agreement more than one year after the
+cause of action arose. Each party waives its rights to a jury trial in any
+resulting litigation.
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..2e9812d
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,40 @@
+# Notices for Edapt
+
+This content is produced and maintained by the Eclipse Edapt project.
+
+* Project home: https://projects.eclipse.org/projects/modeling.edapt
+
+## Trademarks
+
+Eclipse Edapt, and Edapt are trademarks of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 1.0 which is available at
+http://www.eclipse.org/legal/epl-v10.html.
+
+SPDX-License-Identifier: EPL-1.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* http://git.eclipse.org/c/edapt/org.eclipse.emf.edapt.git
+
+## Third-party Content
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/examples/library.edit/META-INF/MANIFEST.MF b/examples/library.edit/META-INF/MANIFEST.MF
index d1cf422..e4aca0f 100644
--- a/examples/library.edit/META-INF/MANIFEST.MF
+++ b/examples/library.edit/META-INF/MANIFEST.MF
@@ -13,3 +13,4 @@
  library;visibility:=reexport,
  org.eclipse.emf.edit;visibility:=reexport
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: library.edit
diff --git a/examples/library.editor/META-INF/MANIFEST.MF b/examples/library.editor/META-INF/MANIFEST.MF
index 6338a7d..6bcf724 100644
--- a/examples/library.editor/META-INF/MANIFEST.MF
+++ b/examples/library.editor/META-INF/MANIFEST.MF
@@ -16,3 +16,4 @@
  org.eclipse.emf.edit.ui;visibility:=reexport,
  org.eclipse.ui.ide;visibility:=reexport
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: library.editor
diff --git a/examples/library/META-INF/MANIFEST.MF b/examples/library/META-INF/MANIFEST.MF
index b7d729a..ef084a5 100644
--- a/examples/library/META-INF/MANIFEST.MF
+++ b/examples/library/META-INF/MANIFEST.MF
@@ -14,3 +14,4 @@
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.emf.edapt.history;bundle-version="0.3.0";visibility:=reexport
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: library
diff --git a/examples/statemachine_ecoop.edit/META-INF/MANIFEST.MF b/examples/statemachine_ecoop.edit/META-INF/MANIFEST.MF
index 03c75ff..a3955c0 100644
--- a/examples/statemachine_ecoop.edit/META-INF/MANIFEST.MF
+++ b/examples/statemachine_ecoop.edit/META-INF/MANIFEST.MF
@@ -13,3 +13,4 @@
  org.eclipse.emf.edit;visibility:=reexport
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: statemachine_ecoop.edit
diff --git a/examples/statemachine_ecoop.editor/META-INF/MANIFEST.MF b/examples/statemachine_ecoop.editor/META-INF/MANIFEST.MF
index 94d096d..3299b7c 100644
--- a/examples/statemachine_ecoop.editor/META-INF/MANIFEST.MF
+++ b/examples/statemachine_ecoop.editor/META-INF/MANIFEST.MF
@@ -18,3 +18,4 @@
  org.eclipse.emf.edapt.migration.ui;bundle-version="0.3.0"
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: statemachine_ecoop.editor
diff --git a/examples/statemachine_ecoop/META-INF/MANIFEST.MF b/examples/statemachine_ecoop/META-INF/MANIFEST.MF
index 1124fa4..6a974a0 100644
--- a/examples/statemachine_ecoop/META-INF/MANIFEST.MF
+++ b/examples/statemachine_ecoop/META-INF/MANIFEST.MF
@@ -14,3 +14,4 @@
  org.eclipse.emf.edapt.history;bundle-version="0.3.0"
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: statemachine_ecoop
diff --git a/examples/ttc_gmf/META-INF/MANIFEST.MF b/examples/ttc_gmf/META-INF/MANIFEST.MF
index 72bfa27..3d7f845 100644
--- a/examples/ttc_gmf/META-INF/MANIFEST.MF
+++ b/examples/ttc_gmf/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 0.1.0
 Require-Bundle: org.eclipse.emf.ecore,
  org.eclipse.emf.edapt.history;bundle-version="0.3.0"
+Automatic-Module-Name: ttc_gmf
diff --git a/examples/ttc_helloworld/META-INF/MANIFEST.MF b/examples/ttc_helloworld/META-INF/MANIFEST.MF
index 639d8aa..643dbf5 100644
--- a/examples/ttc_helloworld/META-INF/MANIFEST.MF
+++ b/examples/ttc_helloworld/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@
 Require-Bundle: org.eclipse.emf.ecore,
  org.eclipse.emf.edapt.migration;bundle-version="0.3.0",
  org.eclipse.emf.edapt.history;bundle-version="0.3.0"
+Automatic-Module-Name: ttc_helloworld
diff --git a/examples/ttc_reengineering/META-INF/MANIFEST.MF b/examples/ttc_reengineering/META-INF/MANIFEST.MF
index 3a8f42f..07dc847 100644
--- a/examples/ttc_reengineering/META-INF/MANIFEST.MF
+++ b/examples/ttc_reengineering/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@
 Require-Bundle: org.eclipse.emf.ecore,
  org.eclipse.emf.edapt.migration,
  org.eclipse.emf.edapt.history
+Automatic-Module-Name: ttc_reengineering
diff --git a/plugins/org.eclipse.emf.edapt.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.common.ui/META-INF/MANIFEST.MF
index 993beca..7631940 100644
--- a/plugins/org.eclipse.emf.edapt.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.common.ui/META-INF/MANIFEST.MF
@@ -13,3 +13,4 @@
 Export-Package: org.eclipse.emf.edapt.common.ui;version="1.3.1";x-friends:="org.eclipse.emf.edapt.history.editor,org.eclipse.emf.edapt.migration.ui"
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
+Automatic-Module-Name: org.eclipse.emf.edapt.common.ui
diff --git a/plugins/org.eclipse.emf.edapt.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.common/META-INF/MANIFEST.MF
index 8ef6e0f..b0d4360 100644
--- a/plugins/org.eclipse.emf.edapt.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.common/META-INF/MANIFEST.MF
@@ -24,3 +24,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
+Automatic-Module-Name: org.eclipse.emf.edapt.common
diff --git a/plugins/org.eclipse.emf.edapt.declaration.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.declaration.edit/META-INF/MANIFEST.MF
index 77a438d..3ebc68a 100644
--- a/plugins/org.eclipse.emf.edapt.declaration.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.declaration.edit/META-INF/MANIFEST.MF
@@ -18,3 +18,4 @@
  org.eclipse.emf.ecore;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.edit;bundle-version="[2.7.0,3.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.emf.edapt.declaration.edit
diff --git a/plugins/org.eclipse.emf.edapt.declaration.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.declaration.editor/META-INF/MANIFEST.MF
index 759d402..72e2a49 100644
--- a/plugins/org.eclipse.emf.edapt.declaration.editor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.declaration.editor/META-INF/MANIFEST.MF
@@ -43,3 +43,4 @@
  org.eclipse.emf.ecore.xmi;bundle-version="[2.7.0,3.0.0)",
  org.eclipse.emf.edapt.common.ui;bundle-version="[1.3.1,2.0.0)"
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.emf.edapt.declaration.editor
diff --git a/plugins/org.eclipse.emf.edapt.declaration/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.declaration/META-INF/MANIFEST.MF
index 17261ab..f6aff29 100644
--- a/plugins/org.eclipse.emf.edapt.declaration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.declaration/META-INF/MANIFEST.MF
@@ -29,3 +29,4 @@
  org.eclipse.emf.edapt.migration;bundle-version="[1.3.1,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.edapt.declaration.DeclarationPlugin$Implementation
+Automatic-Module-Name: org.eclipse.emf.edapt.declaration
diff --git a/plugins/org.eclipse.emf.edapt.history.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.history.edit/META-INF/MANIFEST.MF
index db4bbbe..3a13c39 100644
--- a/plugins/org.eclipse.emf.edapt.history.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.history.edit/META-INF/MANIFEST.MF
@@ -23,3 +23,4 @@
  org.eclipse.emf.compare;bundle-version="[3.0.0,4.0.0)",
  org.junit;bundle-version="[4.0.0,5.0.0)"
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.emf.edapt.history.edit
diff --git a/plugins/org.eclipse.emf.edapt.history.edit/src/org/eclipse/emf/edapt/history/recorder/CommandStackListener.java b/plugins/org.eclipse.emf.edapt.history.edit/src/org/eclipse/emf/edapt/history/recorder/CommandStackListener.java
index 3b7bb75..33a1691 100644
--- a/plugins/org.eclipse.emf.edapt.history.edit/src/org/eclipse/emf/edapt/history/recorder/CommandStackListener.java
+++ b/plugins/org.eclipse.emf.edapt.history.edit/src/org/eclipse/emf/edapt/history/recorder/CommandStackListener.java
@@ -142,6 +142,9 @@
 	 * not detached due to the save mechanism which reloads the metamodel.
 	 */
 	private boolean checkRecorder() {
+		if (metamodelRecorder == null || metamodelRecorder.getElements().isEmpty()) {
+			return false;
+		}
 		return !metamodelRecorder.getElements().get(0).eIsProxy();
 	}
 
diff --git a/plugins/org.eclipse.emf.edapt.history.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.history.editor/META-INF/MANIFEST.MF
index 4bcb8a2..ccf069b 100644
--- a/plugins/org.eclipse.emf.edapt.history.editor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.history.editor/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@
  org.eclipse.compare;bundle-version="[3.5.400,4.0.0)",
  org.eclipse.emf.compare;bundle-version="[3.0.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.emf.edapt.history.editor
diff --git a/plugins/org.eclipse.emf.edapt.history.editor/generated-src/org/eclipse/emf/edapt/history/presentation/HistoryEditor.java b/plugins/org.eclipse.emf.edapt.history.editor/generated-src/org/eclipse/emf/edapt/history/presentation/HistoryEditor.java
index e9a5196..f552507 100644
--- a/plugins/org.eclipse.emf.edapt.history.editor/generated-src/org/eclipse/emf/edapt/history/presentation/HistoryEditor.java
+++ b/plugins/org.eclipse.emf.edapt.history.editor/generated-src/org/eclipse/emf/edapt/history/presentation/HistoryEditor.java
@@ -249,48 +249,45 @@
 	 *
 	 * @generated
 	 */
-	protected IPartListener partListener =
-		new IPartListener() {
-			@Override
-			public void partActivated(IWorkbenchPart p) {
-				if (p instanceof ContentOutline) {
-					if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
-						getActionBarContributor().setActiveEditor(HistoryEditor.this);
+	protected IPartListener partListener = new IPartListener() {
+		@Override
+		public void partActivated(IWorkbenchPart p) {
+			if (p instanceof ContentOutline) {
+				if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+					getActionBarContributor().setActiveEditor(HistoryEditor.this);
 
-						setCurrentViewer(contentOutlineViewer);
-					}
+					setCurrentViewer(contentOutlineViewer);
 				}
-				else if (p instanceof PropertySheet) {
-					if (((PropertySheet) p).getCurrentPage() == propertySheetPage) {
-						getActionBarContributor().setActiveEditor(HistoryEditor.this);
-						handleActivate();
-					}
-				}
-				else if (p == HistoryEditor.this) {
+			} else if (p instanceof PropertySheet) {
+				if (((PropertySheet) p).getCurrentPage() == propertySheetPage) {
+					getActionBarContributor().setActiveEditor(HistoryEditor.this);
 					handleActivate();
 				}
+			} else if (p == HistoryEditor.this) {
+				handleActivate();
 			}
+		}
 
-			@Override
-			public void partBroughtToTop(IWorkbenchPart p) {
-				// Ignore.
-			}
+		@Override
+		public void partBroughtToTop(IWorkbenchPart p) {
+			// Ignore.
+		}
 
-			@Override
-			public void partClosed(IWorkbenchPart p) {
-				// Ignore.
-			}
+		@Override
+		public void partClosed(IWorkbenchPart p) {
+			// Ignore.
+		}
 
-			@Override
-			public void partDeactivated(IWorkbenchPart p) {
-				// Ignore.
-			}
+		@Override
+		public void partDeactivated(IWorkbenchPart p) {
+			// Ignore.
+		}
 
-			@Override
-			public void partOpened(IWorkbenchPart p) {
-				// Ignore.
-			}
-		};
+		@Override
+		public void partOpened(IWorkbenchPart p) {
+			// Ignore.
+		}
+	};
 
 	/**
 	 * Resources that have been removed since last activation.
@@ -344,52 +341,48 @@
 	 *
 	 * @generated
 	 */
-	protected EContentAdapter problemIndicationAdapter =
-		new EContentAdapter() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				if (notification.getNotifier() instanceof Resource) {
-					switch (notification.getFeatureID(Resource.class)) {
-					case Resource.RESOURCE__IS_LOADED:
-					case Resource.RESOURCE__ERRORS:
-					case Resource.RESOURCE__WARNINGS: {
-						final Resource resource = (Resource) notification.getNotifier();
-						final Diagnostic diagnostic = analyzeResourceProblems(resource, null);
-						if (diagnostic.getSeverity() != Diagnostic.OK) {
-							resourceToDiagnosticMap.put(resource, diagnostic);
-						}
-						else {
-							resourceToDiagnosticMap.remove(resource);
-						}
-
-						if (updateProblemIndication) {
-							getSite().getShell().getDisplay().asyncExec
-								(new Runnable() {
-									@Override
-									public void run() {
-										updateProblemIndication();
-									}
-								});
-						}
-						break;
+	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+		@Override
+		public void notifyChanged(Notification notification) {
+			if (notification.getNotifier() instanceof Resource) {
+				switch (notification.getFeatureID(Resource.class)) {
+				case Resource.RESOURCE__IS_LOADED:
+				case Resource.RESOURCE__ERRORS:
+				case Resource.RESOURCE__WARNINGS: {
+					final Resource resource = (Resource) notification.getNotifier();
+					final Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+					if (diagnostic.getSeverity() != Diagnostic.OK) {
+						resourceToDiagnosticMap.put(resource, diagnostic);
+					} else {
+						resourceToDiagnosticMap.remove(resource);
 					}
+
+					if (updateProblemIndication) {
+						getSite().getShell().getDisplay().asyncExec(new Runnable() {
+							@Override
+							public void run() {
+								updateProblemIndication();
+							}
+						});
 					}
+					break;
 				}
-				else {
-					super.notifyChanged(notification);
 				}
+			} else {
+				super.notifyChanged(notification);
 			}
+		}
 
-			@Override
-			protected void setTarget(Resource target) {
-				basicSetTarget(target);
-			}
+		@Override
+		protected void setTarget(Resource target) {
+			basicSetTarget(target);
+		}
 
-			@Override
-			protected void unsetTarget(Resource target) {
-				basicUnsetTarget(target);
-			}
-		};
+		@Override
+		protected void unsetTarget(Resource target) {
+			basicUnsetTarget(target);
+		}
+	};
 
 	/**
 	 * This listens for workspace changes.
@@ -398,82 +391,77 @@
 	 *
 	 * @generated
 	 */
-	protected IResourceChangeListener resourceChangeListener =
-		new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				final IResourceDelta delta = event.getDelta();
-				try {
-					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
-						protected ResourceSet resourceSet = editingDomain.getResourceSet();
-						protected Collection<Resource> changedResources = new ArrayList<Resource>();
-						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+		@Override
+		public void resourceChanged(IResourceChangeEvent event) {
+			final IResourceDelta delta = event.getDelta();
+			try {
+				class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+					protected ResourceSet resourceSet = editingDomain.getResourceSet();
+					protected Collection<Resource> changedResources = new ArrayList<Resource>();
+					protected Collection<Resource> removedResources = new ArrayList<Resource>();
 
-						@Override
-						public boolean visit(IResourceDelta delta) {
-							if (delta.getResource().getType() == IResource.FILE) {
-								if (delta.getKind() == IResourceDelta.REMOVED ||
-									delta.getKind() == IResourceDelta.CHANGED
+					@Override
+					public boolean visit(IResourceDelta delta) {
+						if (delta.getResource().getType() == IResource.FILE) {
+							if (delta.getKind() == IResourceDelta.REMOVED ||
+								delta.getKind() == IResourceDelta.CHANGED
 									&& delta.getFlags() != IResourceDelta.MARKERS) {
-									final Resource resource = resourceSet.getResource(
-										URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
-									if (resource != null) {
-										if (delta.getKind() == IResourceDelta.REMOVED) {
-											removedResources.add(resource);
-										}
-										else if (!savedResources.remove(resource)) {
-											changedResources.add(resource);
-										}
+								final Resource resource = resourceSet.getResource(
+									URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+								if (resource != null) {
+									if (delta.getKind() == IResourceDelta.REMOVED) {
+										removedResources.add(resource);
+									} else if (!savedResources.remove(resource)) {
+										changedResources.add(resource);
 									}
 								}
 							}
-
-							return true;
 						}
 
-						public Collection<Resource> getChangedResources() {
-							return changedResources;
-						}
-
-						public Collection<Resource> getRemovedResources() {
-							return removedResources;
-						}
+						return true;
 					}
 
-					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
-					delta.accept(visitor);
-
-					if (!visitor.getRemovedResources().isEmpty()) {
-						getSite().getShell().getDisplay().asyncExec
-							(new Runnable() {
-								@Override
-								public void run() {
-									removedResources.addAll(visitor.getRemovedResources());
-									if (!isDirty()) {
-										getSite().getPage().closeEditor(HistoryEditor.this, false);
-									}
-								}
-							});
+					public Collection<Resource> getChangedResources() {
+						return changedResources;
 					}
 
-					if (!visitor.getChangedResources().isEmpty()) {
-						getSite().getShell().getDisplay().asyncExec
-							(new Runnable() {
-								@Override
-								public void run() {
-									changedResources.addAll(visitor.getChangedResources());
-									if (getSite().getPage().getActiveEditor() == HistoryEditor.this) {
-										handleActivate();
-									}
-								}
-							});
+					public Collection<Resource> getRemovedResources() {
+						return removedResources;
 					}
 				}
-				catch (final CoreException exception) {
-					HistoryEditorPlugin.INSTANCE.log(exception);
+
+				final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+				delta.accept(visitor);
+
+				if (!visitor.getRemovedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						@Override
+						public void run() {
+							removedResources.addAll(visitor.getRemovedResources());
+							if (!isDirty()) {
+								getSite().getPage().closeEditor(HistoryEditor.this, false);
+							}
+						}
+					});
 				}
+
+				if (!visitor.getChangedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						@Override
+						public void run() {
+							changedResources.addAll(visitor.getChangedResources());
+							if (getSite().getPage().getActiveEditor() == HistoryEditor.this) {
+								handleActivate();
+							}
+						}
+					});
+				}
+			} catch (final CoreException exception) {
+				HistoryEditorPlugin.INSTANCE.log(exception);
 			}
-		};
+		}
+	};
 
 	/**
 	 * Handles activation of the editor or it's associated views.
@@ -496,14 +484,12 @@
 		if (!removedResources.isEmpty()) {
 			if (handleDirtyConflict()) {
 				getSite().getPage().closeEditor(HistoryEditor.this, false);
-			}
-			else {
+			} else {
 				removedResources.clear();
 				changedResources.clear();
 				savedResources.clear();
 			}
-		}
-		else if (!changedResources.isEmpty()) {
+		} else if (!changedResources.isEmpty()) {
 			changedResources.removeAll(savedResources);
 			handleChangedResources();
 			changedResources.clear();
@@ -557,12 +543,11 @@
 	 */
 	protected void updateProblemIndication() {
 		if (updateProblemIndication) {
-			final BasicDiagnostic diagnostic =
-				new BasicDiagnostic
-				(Diagnostic.OK, "org.eclipse.emf.edapt.history.editor", //$NON-NLS-1$
-					0,
-					null,
-					new Object[] { editingDomain.getResourceSet() });
+			final BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
+				"org.eclipse.emf.edapt.history.editor", //$NON-NLS-1$
+				0,
+				null,
+				new Object[] { editingDomain.getResourceSet() });
 			for (final Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
 				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
 					diagnostic.add(childDiagnostic);
@@ -575,8 +560,7 @@
 				if (diagnostic.getSeverity() != Diagnostic.OK) {
 					setActivePage(lastEditorPage);
 				}
-			}
-			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+			} else if (diagnostic.getSeverity() != Diagnostic.OK) {
 				final ProblemEditorPart problemEditorPart = new ProblemEditorPart();
 				problemEditorPart.setDiagnostic(diagnostic);
 				problemEditorPart.setMarkerHelper(markerHelper);
@@ -611,10 +595,9 @@
 	 * @generated
 	 */
 	protected boolean handleDirtyConflict() {
-		return MessageDialog.openQuestion
-			(getSite().getShell(),
-				getString("_UI_FileConflict_label"), //$NON-NLS-1$
-				getString("_WARN_FileConflict")); //$NON-NLS-1$
+		return MessageDialog.openQuestion(getSite().getShell(),
+			getString("_UI_FileConflict_label"), //$NON-NLS-1$
+			getString("_WARN_FileConflict")); //$NON-NLS-1$
 	}
 
 	/**
@@ -654,30 +637,28 @@
 		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with
 		// focus.
 		//
-		commandStack.addCommandStackListener
-			(new CommandStackListener() {
-				@Override
-				public void commandStackChanged(final EventObject event) {
-					getContainer().getDisplay().asyncExec
-						(new Runnable() {
-							@Override
-							public void run() {
-								firePropertyChange(IEditorPart.PROP_DIRTY);
+		commandStack.addCommandStackListener(new CommandStackListener() {
+			@Override
+			public void commandStackChanged(final EventObject event) {
+				getContainer().getDisplay().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						firePropertyChange(IEditorPart.PROP_DIRTY);
 
-								// Try to select the affected objects.
-								//
-								final Command mostRecentCommand = ((CommandStack) event.getSource())
-									.getMostRecentCommand();
-								if (mostRecentCommand != null) {
-									setSelectionToViewer(mostRecentCommand.getAffectedObjects());
-								}
-								if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
-									propertySheetPage.refresh();
-								}
-							}
-						});
-				}
-			});
+						// Try to select the affected objects.
+						//
+						final Command mostRecentCommand = ((CommandStack) event.getSource())
+							.getMostRecentCommand();
+						if (mostRecentCommand != null) {
+							setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+						}
+						if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+							propertySheetPage.refresh();
+						}
+					}
+				});
+			}
+		});
 
 		// Create the editing domain with a special command stack.
 		//
@@ -708,17 +689,16 @@
 		// Make sure it's okay.
 		//
 		if (theSelection != null && !theSelection.isEmpty()) {
-			final Runnable runnable =
-				new Runnable() {
-					@Override
-					public void run() {
-						// Try to select the items in the current content viewer of the editor.
-						//
-						if (currentViewer != null) {
-							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
-						}
+			final Runnable runnable = new Runnable() {
+				@Override
+				public void run() {
+					// Try to select the items in the current content viewer of the editor.
+					//
+					if (currentViewer != null) {
+						currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
 					}
-				};
+				}
+			};
 			getSite().getShell().getDisplay().asyncExec(runnable);
 		}
 	}
@@ -817,15 +797,14 @@
 			if (selectionChangedListener == null) {
 				// Create the listener on demand.
 				//
-				selectionChangedListener =
-					new ISelectionChangedListener() {
-						// This just notifies those things that are affected by the section.
-						//
-						@Override
-						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
-							setSelection(selectionChangedEvent.getSelection());
-						}
-					};
+				selectionChangedListener = new ISelectionChangedListener() {
+					// This just notifies those things that are affected by the section.
+					//
+					@Override
+					public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+						setSelection(selectionChangedEvent.getSelection());
+					}
+				};
 			}
 
 			// Stop listening to the old one.
@@ -921,22 +900,19 @@
 	 */
 	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
 		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
-			final BasicDiagnostic basicDiagnostic =
-				new BasicDiagnostic
-				(Diagnostic.ERROR, "org.eclipse.emf.edapt.history.editor", //$NON-NLS-1$
-					0,
-					getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
-					new Object[] { exception == null ? (Object) resource : exception });
+			final BasicDiagnostic basicDiagnostic = new BasicDiagnostic(Diagnostic.ERROR,
+				"org.eclipse.emf.edapt.history.editor", //$NON-NLS-1$
+				0,
+				getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+				new Object[] { exception == null ? (Object) resource : exception });
 			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
 			return basicDiagnostic;
-		}
-		else if (exception != null) {
+		} else if (exception != null) {
 			return new BasicDiagnostic(Diagnostic.ERROR, "org.eclipse.emf.edapt.history.editor", //$NON-NLS-1$
 				0,
 				getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
 				new Object[] { exception });
-		}
-		else {
+		} else {
 			return Diagnostic.OK_INSTANCE;
 		}
 	}
@@ -975,39 +951,38 @@
 			final int pageIndex = addPage(tree);
 			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
 
-			getSite().getShell().getDisplay().asyncExec
-				(new Runnable() {
-					@Override
-					public void run() {
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (getPageCount() > 0) {
 						setActivePage(0);
 					}
-				});
+				}
+			});
 		}
 
 		// Ensures that this editor will only display the page's tab
 		// area if there are more than one page
 		//
-		getContainer().addControlListener
-			(new ControlAdapter() {
-				boolean guard = false;
+		getContainer().addControlListener(new ControlAdapter() {
+			boolean guard = false;
 
-				@Override
-				public void controlResized(ControlEvent event) {
-					if (!guard) {
-						guard = true;
-						hideTabs();
-						guard = false;
-					}
+			@Override
+			public void controlResized(ControlEvent event) {
+				if (!guard) {
+					guard = true;
+					hideTabs();
+					guard = false;
 				}
-			});
+			}
+		});
 
-		getSite().getShell().getDisplay().asyncExec
-			(new Runnable() {
-				@Override
-				public void run() {
-					updateProblemIndication();
-				}
-			});
+		getSite().getShell().getDisplay().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				updateProblemIndication();
+			}
+		});
 	}
 
 	/**
@@ -1075,14 +1050,11 @@
 	public Object getAdapter(Class key) {
 		if (key.equals(IContentOutlinePage.class)) {
 			return showOutlineView() ? getContentOutlinePage() : null;
-		}
-		else if (key.equals(IPropertySheetPage.class)) {
+		} else if (key.equals(IPropertySheetPage.class)) {
 			return getPropertySheetPage();
-		}
-		else if (key.equals(IGotoMarker.class)) {
+		} else if (key.equals(IGotoMarker.class)) {
 			return this;
-		}
-		else {
+		} else {
 			return super.getAdapter(key);
 		}
 	}
@@ -1141,15 +1113,14 @@
 
 			// Listen to selection so that we can handle it is a special way.
 			//
-			contentOutlinePage.addSelectionChangedListener
-				(new ISelectionChangedListener() {
-					// This ensures that we handle selections correctly.
-					//
-					@Override
-					public void selectionChanged(SelectionChangedEvent event) {
-						handleContentOutlineSelection(event.getSelection());
-					}
-				});
+			contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+				// This ensures that we handle selections correctly.
+				//
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					handleContentOutlineSelection(event.getSelection());
+				}
+			});
 		}
 
 		return contentOutlinePage;
@@ -1164,20 +1135,19 @@
 	 */
 	public IPropertySheetPage getPropertySheetPage() {
 		if (propertySheetPage == null) {
-			propertySheetPage =
-				new ExtendedPropertySheetPage(editingDomain) {
-					@Override
-					public void setSelectionToViewer(List<?> selection) {
-						HistoryEditor.this.setSelectionToViewer(selection);
-						HistoryEditor.this.setFocus();
-					}
+			propertySheetPage = new ExtendedPropertySheetPage(editingDomain) {
+				@Override
+				public void setSelectionToViewer(List<?> selection) {
+					HistoryEditor.this.setSelectionToViewer(selection);
+					HistoryEditor.this.setFocus();
+				}
 
-					@Override
-					public void setActionBars(IActionBars actionBars) {
-						super.setActionBars(actionBars);
-						getActionBarContributor().shareGlobalActions(this, actionBars);
-					}
-				};
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			};
 			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
 		}
 
@@ -1240,33 +1210,31 @@
 
 		// Do the work within an operation because this is a long running activity that modifies the workbench.
 		//
-		final WorkspaceModifyOperation operation =
-			new WorkspaceModifyOperation() {
-				// This is the method that gets invoked when the operation runs.
+		final WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+			// This is the method that gets invoked when the operation runs.
+			//
+			@Override
+			public void execute(IProgressMonitor monitor) {
+				// Save the resources to the file system.
 				//
-				@Override
-				public void execute(IProgressMonitor monitor) {
-					// Save the resources to the file system.
-					//
-					boolean first = true;
-					for (final Resource resource : editingDomain.getResourceSet().getResources()) {
-						if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
-							&& !editingDomain.isReadOnly(resource)) {
-							try {
-								final long timeStamp = resource.getTimeStamp();
-								resource.save(saveOptions);
-								if (resource.getTimeStamp() != timeStamp) {
-									savedResources.add(resource);
-								}
+				boolean first = true;
+				for (final Resource resource : editingDomain.getResourceSet().getResources()) {
+					if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+						&& !editingDomain.isReadOnly(resource)) {
+						try {
+							final long timeStamp = resource.getTimeStamp();
+							resource.save(saveOptions);
+							if (resource.getTimeStamp() != timeStamp) {
+								savedResources.add(resource);
 							}
-							catch (final Exception exception) {
-								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
-							}
-							first = false;
+						} catch (final Exception exception) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
 						}
+						first = false;
 					}
 				}
-			};
+			}
+		};
 
 		updateProblemIndication = false;
 		try {
@@ -1352,10 +1320,9 @@
 		editingDomain.getResourceSet().getResources().get(0).setURI(uri);
 		setInputWithNotify(editorInput);
 		setPartName(editorInput.getName());
-		final IProgressMonitor progressMonitor =
-			getActionBars().getStatusLineManager() != null ?
-				getActionBars().getStatusLineManager().getProgressMonitor() :
-				new NullProgressMonitor();
+		final IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null
+			? getActionBars().getStatusLineManager().getProgressMonitor()
+			: new NullProgressMonitor();
 		doSave(progressMonitor);
 	}
 
@@ -1473,8 +1440,9 @@
 	 * @generated
 	 */
 	public void setStatusLineManager(ISelection selection) {
-		final IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
-			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+		final IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer
+			? contentOutlineStatusLineManager
+			: getActionBars().getStatusLineManager();
 
 		if (statusLineManager != null) {
 			if (selection instanceof IStructuredSelection) {
@@ -1496,8 +1464,7 @@
 					break;
 				}
 				}
-			}
-			else {
+			} else {
 				statusLineManager.setMessage(""); //$NON-NLS-1$
 			}
 		}
diff --git a/plugins/org.eclipse.emf.edapt.history/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.history/META-INF/MANIFEST.MF
index 9af8f14..32aa9eb 100644
--- a/plugins/org.eclipse.emf.edapt.history/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.history/META-INF/MANIFEST.MF
@@ -36,3 +36,4 @@
  org.eclipse.emf.edapt.migration;bundle-version="[1.3.1,2.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.edapt.spi.history.HistoryPlugin$Implementation
+Automatic-Module-Name: org.eclipse.emf.edapt.history
diff --git a/plugins/org.eclipse.emf.edapt.history/src/org/eclipse/emf/edapt/history/util/MoveChecker.java b/plugins/org.eclipse.emf.edapt.history/src/org/eclipse/emf/edapt/history/util/MoveChecker.java
index a9b93a8..97e9e8b 100644
--- a/plugins/org.eclipse.emf.edapt.history/src/org/eclipse/emf/edapt/history/util/MoveChecker.java
+++ b/plugins/org.eclipse.emf.edapt.history/src/org/eclipse/emf/edapt/history/util/MoveChecker.java
@@ -47,8 +47,12 @@
 	 * change or release
 	 */
 	public static boolean canBeMoved(List<Change> changes, EObject target) {
-		final List<Change> children = getChanges(getChildren(target));
-		return canBeMoved(changes, target, children.size());
+		try {
+			final List<Change> children = getChanges(getChildren(target));
+			return canBeMoved(changes, target, children.size());
+		} catch (final IllegalStateException ex) {
+			return false;
+		}
 	}
 
 	/**
@@ -57,33 +61,37 @@
 	 */
 	public static boolean canBeMoved(List<Change> changes, EObject target,
 		int targetIndex) {
-		if (!allowedTarget(changes, target)) {
-			return false;
-		}
-		for (final Change change : changes) {
-			final EObject source = change.eContainer();
-			final int sourceIndex = getIndex(change);
+		try {
+			if (!allowedTarget(changes, target)) {
+				return false;
+			}
+			for (final Change change : changes) {
+				final EObject source = change.eContainer();
+				final int sourceIndex = getIndex(change);
 
-			if (source == target && sourceIndex == targetIndex) {
-				// nothing has to be done
-			} else if (before(source, sourceIndex, target, targetIndex)) {
-				final List<Change> difference = getDifference(source,
-					sourceIndex + 1, target, targetIndex);
-				difference.removeAll(changes);
-				if (DependencyChecker.depends(difference, Collections
-					.singletonList(change))) {
-					return false;
-				}
-			} else {
-				final List<Change> difference = getDifference(target, targetIndex,
-					source, sourceIndex - 1);
-				difference.removeAll(changes);
-				if (DependencyChecker.depends(change, difference)) {
-					return false;
+				if (source == target && sourceIndex == targetIndex) {
+					// nothing has to be done
+				} else if (before(source, sourceIndex, target, targetIndex)) {
+					final List<Change> difference = getDifference(source,
+						sourceIndex + 1, target, targetIndex);
+					difference.removeAll(changes);
+					if (DependencyChecker.depends(difference, Collections
+						.singletonList(change))) {
+						return false;
+					}
+				} else {
+					final List<Change> difference = getDifference(target, targetIndex,
+						source, sourceIndex - 1);
+					difference.removeAll(changes);
+					if (DependencyChecker.depends(change, difference)) {
+						return false;
+					}
 				}
 			}
+			return true;
+		} catch (final IllegalStateException ex) {
+			return false;
 		}
-		return true;
 	}
 
 	/**
@@ -152,7 +160,8 @@
 			difference.addAll(changes);
 			difference.addAll(getDifference(source.eContainer(),
 				source instanceof Delete ? getIndex(source)
-					: getIndex(source) + 1, target, targetIndex));
+					: getIndex(source) + 1,
+				target, targetIndex));
 		}
 		return difference;
 	}
@@ -186,6 +195,9 @@
 	 * Get the index of an element within its container element
 	 */
 	private static int getIndex(EObject element) {
+		if (element == null || element.eContainer() == null || element.eContainmentFeature() == null) {
+			throw new IllegalStateException();
+		}
 		return ((List) element.eContainer().eGet(element.eContainmentFeature()))
 			.indexOf(element);
 	}
diff --git a/plugins/org.eclipse.emf.edapt.migration.test/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.migration.test/META-INF/MANIFEST.MF
index 3b38230..30e1a77 100644
--- a/plugins/org.eclipse.emf.edapt.migration.test/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.migration.test/META-INF/MANIFEST.MF
@@ -20,3 +20,4 @@
  org.eclipse.emf.edapt.migration.test.impl;version="1.3.1";x-internal:=true,
  org.eclipse.emf.edapt.migration.test.util;version="1.3.1";x-internal:=true
 Bundle-Vendor: %providerName
+Automatic-Module-Name: org.eclipse.emf.edapt.migration.test
diff --git a/plugins/org.eclipse.emf.edapt.migration.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.migration.ui/META-INF/MANIFEST.MF
index af8918f..d76203f 100644
--- a/plugins/org.eclipse.emf.edapt.migration.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.migration.ui/META-INF/MANIFEST.MF
@@ -19,3 +19,4 @@
 Export-Package: org.eclipse.emf.edapt.migration.ui;version="1.3.1";x-internal:=true
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
+Automatic-Module-Name: org.eclipse.emf.edapt.migration.ui
diff --git a/plugins/org.eclipse.emf.edapt.migration/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.edapt.migration/META-INF/MANIFEST.MF
index fab1969..f27cdaf 100644
--- a/plugins/org.eclipse.emf.edapt.migration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.edapt.migration/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@
  org.eclipse.emf.edapt.common;bundle-version="[1.3.1,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.edapt.spi.migration.MigrationPlugin$Implementation
+Automatic-Module-Name: org.eclipse.emf.edapt.migration
diff --git a/plugins/org.eclipse.emf.edapt.migration/build.properties b/plugins/org.eclipse.emf.edapt.migration/build.properties
index 1239380..415bb7c 100644
--- a/plugins/org.eclipse.emf.edapt.migration/build.properties
+++ b/plugins/org.eclipse.emf.edapt.migration/build.properties
@@ -20,8 +20,10 @@
                META-INF/,\
                plugin.xml,\
                plugin.properties,\
-               about.html
+               about.html,\
+               schema/
 jars.compile.order = .
 source.. = src/,\
            generated-src/
-src.includes = about.html
+src.includes = about.html,\
+               schema/
diff --git a/tests/org.eclipse.emf.edapt.common.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.edapt.common.tests/META-INF/MANIFEST.MF
index a2d2ea7..32ab18b 100644
--- a/tests/org.eclipse.emf.edapt.common.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.edapt.common.tests/META-INF/MANIFEST.MF
@@ -8,3 +8,4 @@
 Bundle-Vendor: Eclipse Modeling Project
 Require-Bundle: org.junit;bundle-version="[4.0.0,5.0.0)"
 Export-Package: org.eclipse.emf.edapt.internal.common;version="1.3.1";x-internal:=true
+Automatic-Module-Name: org.eclipse.emf.edapt.common.tests
diff --git a/tests/org.eclipse.emf.edapt.rcptt/AllTests.suite b/tests/org.eclipse.emf.edapt.rcptt/AllTests.suite
index 76f4bb0..d735928 100644
--- a/tests/org.eclipse.emf.edapt.rcptt/AllTests.suite
+++ b/tests/org.eclipse.emf.edapt.rcptt/AllTests.suite
@@ -4,8 +4,8 @@
 Element-Type: testsuite
 Element-Version: 2.0
 Id: _D99h4AkREeWg38ag0nnchw
-Runtime-Version: 2.2.0.201706152316
-Save-Time: 11/15/17 3:35 PM
+Runtime-Version: 2.3.0.201804052311
+Save-Time: 6/11/18 12:59 PM
 
 ------=_testcase-items-62c497da-4241-31f4-811a-6b453a3ecff8
 Content-Type: text/testcase
@@ -20,5 +20,6 @@
 _spU9wAkQEeWg38ag0nnchw	// kind: 'test' name: 'Select Change' path: 'reconstruction_view/Select Change.test'
 _aedIALQUEee_6uXiZb2DRg	// kind: 'test' name: 'Breaking change indication' path: 'general/Breaking change indication.test'
 _ExiWUMoSEeeVv4pPxMNi2w	// kind: 'test' name: 'Multiple ecores' path: 'general/Multiple ecores.test'
+_wXzbsG1lEeiv5_IJNNSbGg	// kind: 'test' name: 'Extension Points' path: 'general/Extension Points.test'
 
 ------=_testcase-items-62c497da-4241-31f4-811a-6b453a3ecff8--
diff --git a/tests/org.eclipse.emf.edapt.rcptt/general/Extension Points.test b/tests/org.eclipse.emf.edapt.rcptt/general/Extension Points.test
new file mode 100644
index 0000000..2f77cdb
--- /dev/null
+++ b/tests/org.eclipse.emf.edapt.rcptt/general/Extension Points.test
@@ -0,0 +1,53 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _bma0MAkBEeWg38ag0nnchw,_CqPtsAkFEeWg38ag0nnchw,_NFFKUAkEEeWg38ag0nnchw,_3TFIgAkBEeWg38ag0nnchw,_rv0HYAkGEeWg38ag0nnchw,_qYMXsAkHEeWg38ag0nnchw
+Element-Name: Extension Points
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _wXzbsG1lEeiv5_IJNNSbGg
+Runtime-Version: 2.3.0.201804052311
+Save-Time: 6/11/18 12:58 PM
+Testcase-Type: ecl
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-view "Package Explorer" | get-tree | select "org.eclipse.emf.ecp.makeithappen.model/META-INF/MANIFEST.MF" 
+    | double-click
+with [get-editor "org.eclipse.emf.ecp.makeithappen.model"] {
+    get-tab-folder | get-tab-item Extensions | click
+    get-section "All Extensions" | get-button "Add..." | click
+}
+with [get-window "New Extension"] {
+    with [get-editbox -after [get-label "Extension Point filter:"]] {
+        set-text edapt
+        key-type Left -times 17
+        set-text "*edapt"
+    }
+    get-button "Show only extension points from the required plug-ins" | uncheck
+    get-table | select "org.eclipse.emf.edapt.migrators"
+    get-button Finish | click
+    get-window "New plug-in dependency" | get-button No | click
+}
+get-editor "org.eclipse.emf.ecp.makeithappen.model" | get-section "Extension Element Details" | get-button "Browse..." 
+    | click
+with [get-window "Resource Attribute Value"] {
+    get-tree | select "org.eclipse.emf.ecp.makeithappen.model/model/task.history"
+    get-button OK | click
+}
+get-editor "org.eclipse.emf.ecp.makeithappen.model" | get-section "All Extensions" | get-button "Add..." | click
+with [get-window "New Extension"] {
+    get-editbox -after [get-label "Extension Point filter:"] | set-text "*edapt"
+    get-button "Show only extension points from the required plug-ins" | uncheck
+    get-table | select "org.eclipse.emf.edapt.factories"
+    get-button Finish | click
+    get-window "New plug-in dependency" | get-button No | click
+}
+with [get-editor "org.eclipse.emf.ecp.makeithappen.model" | get-section "Extension Element Details"] {
+    get-label "nsURI*:" | get-property caption | equals "nsURI*:" | verify-true
+    get-link "class*:" | get-property caption | equals "class*:" | verify-true
+    get-label "useWildcards:" | get-property caption | equals "useWildcards:" | verify-true
+}
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/tests/org.eclipse.emf.edapt.rcptt/pom.xml b/tests/org.eclipse.emf.edapt.rcptt/pom.xml
index 0b5342b..d22a239 100644
--- a/tests/org.eclipse.emf.edapt.rcptt/pom.xml
+++ b/tests/org.eclipse.emf.edapt.rcptt/pom.xml
@@ -8,8 +8,8 @@
 	<packaging>rcpttTest</packaging>
 
 	<properties>
-		<rcptt-maven-version>2.2.0</rcptt-maven-version>
-		<rcptt-runner-version>2.2.0</rcptt-runner-version>
+		<rcptt-maven-version>2.3.0</rcptt-maven-version>
+		<rcptt-runner-version>2.3.0</rcptt-runner-version>
 		<toolchains-version>1.1</toolchains-version>
 	</properties>
 
