Merge remote-tracking branch 'origin/develop' into 13x

# Conflicts:
#	tests/org.eclipse.emf.edapt.common.tests/META-INF/MANIFEST.MF

Change-Id: I16f917780905f8d0e7e2db5ef9f05a2a93396d5d
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
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>