Merge remote-tracking branch 'origin/2.6.x'

Conflicts:
	bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/pom.xml
	bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/pom.xml
	bundles/code/org.eclipse.fx.code.editor.asciidoc/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.asciidoc/pom.xml
	bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/pom.xml
	bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/pom.xml
	bundles/code/org.eclipse.fx.code.editor.configuration.text/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.configuration.text/pom.xml
	bundles/code/org.eclipse.fx.code.editor.configuration/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.configuration/pom.xml
	bundles/code/org.eclipse.fx.code.editor.e4/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.e4/pom.xml
	bundles/code/org.eclipse.fx.code.editor.fx.e4/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.fx.e4/pom.xml
	bundles/code/org.eclipse.fx.code.editor.fx.themes/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.fx.themes/pom.xml
	bundles/code/org.eclipse.fx.code.editor.fx/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.fx/pom.xml
	bundles/code/org.eclipse.fx.code.editor.fx/src/org/eclipse/fx/code/editor/fx/SimpleSourceTextEditorBuilder.java
	bundles/code/org.eclipse.fx.code.editor.langs.contrib/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.langs.contrib/pom.xml
	bundles/code/org.eclipse.fx.code.editor.langs.themes/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.langs.themes/pom.xml
	bundles/code/org.eclipse.fx.code.editor.langs/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor.langs/pom.xml
	bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.code.editor/pom.xml
	bundles/code/org.eclipse.fx.text.compat/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.text.compat/pom.xml
	bundles/code/org.eclipse.fx.text.ui/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.text.ui/pom.xml
	bundles/code/org.eclipse.fx.text/META-INF/MANIFEST.MF
	bundles/code/org.eclipse.fx.text/pom.xml
	bundles/runtime/javax.annotation.jre/pom.xml
	bundles/runtime/javax.xml.jre/pom.xml
	bundles/runtime/org.eclipse.fx.core.databinding/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.databinding/pom.xml
	bundles/runtime/org.eclipse.fx.core.di.context/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.di.context/pom.xml
	bundles/runtime/org.eclipse.fx.core.di/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.di/pom.xml
	bundles/runtime/org.eclipse.fx.core.fxml/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.fxml/pom.xml
	bundles/runtime/org.eclipse.fx.core.guice/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.guice/pom.xml
	bundles/runtime/org.eclipse.fx.core.log4j/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.log4j/pom.xml
	bundles/runtime/org.eclipse.fx.core.p2/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.p2/pom.xml
	bundles/runtime/org.eclipse.fx.core.slf4j/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core.slf4j/pom.xml
	bundles/runtime/org.eclipse.fx.core/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.core/pom.xml
	bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/JavaDSServiceProcessor.java
	bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/ValidatedPropertyBase.java
	bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/SourceTextEditActions.java
	bundles/runtime/org.eclipse.fx.emf.databinding/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.emf.databinding/pom.xml
	bundles/runtime/org.eclipse.fx.emf.edit.ui/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.emf.edit.ui/pom.xml
	bundles/runtime/org.eclipse.fx.formats.svg/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.formats.svg/pom.xml
	bundles/runtime/org.eclipse.fx.javafx/pom.xml
	bundles/runtime/org.eclipse.fx.osgi.util/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.osgi.util/pom.xml
	bundles/runtime/org.eclipse.fx.osgi/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.osgi/pom.xml
	bundles/runtime/org.eclipse.fx.ui.animation/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.animation/pom.xml
	bundles/runtime/org.eclipse.fx.ui.controls/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.controls/pom.xml
	bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java
	bundles/runtime/org.eclipse.fx.ui.databinding/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.databinding/pom.xml
	bundles/runtime/org.eclipse.fx.ui.di.interopt/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.di.interopt/pom.xml
	bundles/runtime/org.eclipse.fx.ui.di/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.di/pom.xml
	bundles/runtime/org.eclipse.fx.ui.dialogs/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.dialogs/pom.xml
	bundles/runtime/org.eclipse.fx.ui.keybindings.e4/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.keybindings.e4/pom.xml
	bundles/runtime/org.eclipse.fx.ui.keybindings.generic/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.keybindings.generic/pom.xml
	bundles/runtime/org.eclipse.fx.ui.keybindings/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.keybindings/pom.xml
	bundles/runtime/org.eclipse.fx.ui.mobile/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.mobile/pom.xml
	bundles/runtime/org.eclipse.fx.ui.panes/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.panes/pom.xml
	bundles/runtime/org.eclipse.fx.ui.services/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.services/pom.xml
	bundles/runtime/org.eclipse.fx.ui.theme/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.theme/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench.base/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench.base/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench.fx/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench.fx/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefSashRenderer.java
	bundles/runtime/org.eclipse.fx.ui.workbench.services/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench.services/pom.xml
	bundles/runtime/org.eclipse.fx.ui.workbench3/META-INF/MANIFEST.MF
	bundles/runtime/org.eclipse.fx.ui.workbench3/pom.xml
	releng/code/org.eclipse.fx.code.base.feature/feature.xml
	releng/code/org.eclipse.fx.code.base.feature/pom.xml
	releng/code/org.eclipse.fx.code.langs.feature/feature.xml
	releng/code/org.eclipse.fx.code.langs.feature/pom.xml
	releng/code/org.eclipse.fx.code.target.feature/feature.xml
	releng/code/org.eclipse.fx.code.target.feature/pom.xml
	releng/org.eclipse.fx.core.shared.updatesite/pom.xml
	releng/org.eclipse.fx.core.shared.updatesite/site.xml
	releng/org.eclipse.fx.releng/pom.xml
	releng/org.eclipse.fx.runtime.doc/META-INF/MANIFEST.MF
	releng/org.eclipse.fx.runtime.doc/pom.xml
	releng/org.eclipse.fx.shared.doc/META-INF/MANIFEST.MF
	releng/org.eclipse.fx.shared.doc/pom.xml
	releng/org.eclipse.fx.shared.releng/pom.xml
	releng/org.eclipse.fx.updatesite/pom.xml
	releng/org.eclipse.fx.updatesite/site.xml
	releng/runtime/org.eclipse.fx..slf4j.target.feature/feature.xml
	releng/runtime/org.eclipse.fx..slf4j.target.feature/pom.xml
	releng/runtime/org.eclipse.fx.core.feature/feature.xml
	releng/runtime/org.eclipse.fx.core.feature/pom.xml
	releng/runtime/org.eclipse.fx.core.shared.feature/feature.xml
	releng/runtime/org.eclipse.fx.core.shared.feature/pom.xml
	releng/runtime/org.eclipse.fx.runtime.e4fx.feature/feature.xml
	releng/runtime/org.eclipse.fx.runtime.e4fx.feature/pom.xml
	releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/feature.xml
	releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/pom.xml
	releng/runtime/org.eclipse.fx.runtime.feature/feature.xml
	releng/runtime/org.eclipse.fx.runtime.feature/pom.xml
	releng/runtime/org.eclipse.fx.runtime.min.feature/feature.xml
	releng/runtime/org.eclipse.fx.runtime.min.feature/pom.xml
	releng/runtime/org.eclipse.fx.target.feature/feature.xml
	releng/runtime/org.eclipse.fx.target.feature/pom.xml
	releng/runtime/org.eclipse.fx.target.rcp.feature/feature.xml
	releng/runtime/org.eclipse.fx.target.rcp.feature/pom.xml
	releng/runtime/org.eclipse.fx.target.rcp4.feature/feature.xml
	releng/runtime/org.eclipse.fx.target.rcp4.feature/pom.xml
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/META-INF/MANIFEST.MF
index d6e9c28..a2fb757 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: E4
 Bundle-SymbolicName: org.eclipse.fx.code.editor.asciidoc.fx.e4
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.1.100",
  org.eclipse.e4.ui.workbench;bundle-version="1.3.0",
@@ -11,12 +11,12 @@
  org.eclipse.e4.ui.di;bundle-version="1.1.0",
  org.eclipse.e4.core.di;bundle-version="1.5.0"
 Import-Package: javax.inject,
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.asciidoc;version="2.6.0",
- org.eclipse.fx.code.editor.fx.e4;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.asciidoc;version="3.0.0",
+ org.eclipse.fx.code.editor.fx.e4;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.asciidoc.fx.e4.AsciiDoctorEditorOpenerTypeProvider.xml
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/pom.xml b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/pom.xml
index f1cbc7e..026d196 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/META-INF/MANIFEST.MF
index 91562c4..7bea5cf 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fx
 Bundle-SymbolicName: org.eclipse.fx.code.editor.asciidoc.fx
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject,
  org.eclipse.e4.core.di.annotations,
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.asciidoc;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.event;version="2.6.0",
- org.eclipse.fx.core.preferences;version="2.6.0"
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.asciidoc;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.event;version="3.0.0",
+ org.eclipse.fx.core.preferences;version="3.0.0"
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/pom.xml b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/pom.xml
index f884203..da5c429 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc.fx/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.asciidoc/META-INF/MANIFEST.MF
index d9dd286..7ee693e 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Asciidoc
 Bundle-SymbolicName: org.eclipse.fx.code.editor.asciidoc
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.code.editor.asciidoc;version="2.6.0"
+Export-Package: org.eclipse.fx.code.editor.asciidoc;version="3.0.0"
diff --git a/bundles/code/org.eclipse.fx.code.editor.asciidoc/pom.xml b/bundles/code/org.eclipse.fx.code.editor.asciidoc/pom.xml
index 17f6ab2..53ce3f3 100644
--- a/bundles/code/org.eclipse.fx.code.editor.asciidoc/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.asciidoc/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/META-INF/MANIFEST.MF
index 9560a47..0287c0b 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/META-INF/MANIFEST.MF
@@ -2,16 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: E4
 Bundle-SymbolicName: org.eclipse.fx.code.editor.configuration.text.e4
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.4.0"
-Import-Package: org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.configuration;version="2.6.0",
- org.eclipse.fx.code.editor.configuration.text;version="2.6.0",
- org.eclipse.fx.code.editor.e4;version="2.6.0",
- org.eclipse.fx.code.editor.fx.e4;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di.context;version="2.6.0",
+Import-Package: org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration.text;version="3.0.0",
+ org.eclipse.fx.code.editor.e4;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di.context;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.configuration.text.e4.ConfigurationModelCF.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.configuration.text.e4.DynamicScannerRuleCalculatorCF.xml
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/pom.xml b/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/pom.xml
index ce89015..9f4367d 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/META-INF/MANIFEST.MF
index dfc0688..e9c82d3 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/META-INF/MANIFEST.MF
@@ -2,20 +2,20 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fx
 Bundle-SymbolicName: org.eclipse.fx.code.editor.configuration.text.fx
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject;version="1.0.0",
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.configuration;version="2.6.0",
- org.eclipse.fx.code.editor.configuration.text;version="2.6.0",
- org.eclipse.fx.code.editor.fx.services;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.text.rules;version="2.6.0",
- org.eclipse.fx.text.ui;version="2.6.0",
- org.eclipse.fx.text.ui.presentation;version="2.6.0",
- org.eclipse.fx.text.ui.rules;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration.text;version="3.0.0",
+ org.eclipse.fx.code.editor.fx.services;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.text.rules;version="3.0.0",
+ org.eclipse.fx.text.ui;version="3.0.0",
+ org.eclipse.fx.text.ui.presentation;version="3.0.0",
+ org.eclipse.fx.text.ui.rules;version="3.0.0",
  org.eclipse.jface.text.rules,
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.configuration.text.fx.ConfigurationPresentationReconcilerTypeProvider.xml
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/pom.xml b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/pom.xml
index eeddf29..8718690 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/src/org/eclipse/fx/code/editor/configuration/text/fx/internal/ConfigurationRuleScanner.java b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/src/org/eclipse/fx/code/editor/configuration/text/fx/internal/ConfigurationRuleScanner.java
index 95ed072..13b362b 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/src/org/eclipse/fx/code/editor/configuration/text/fx/internal/ConfigurationRuleScanner.java
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text.fx/src/org/eclipse/fx/code/editor/configuration/text/fx/internal/ConfigurationRuleScanner.java
@@ -71,7 +71,7 @@
 								endSeq,
 								token,
 								sru.getEscapedBy() != null ? sru.getEscapedBy().charAt(0) : 0,
-								endSeq == null || endSeq.isEmpty())));
+								true)));
 					} else if( ru instanceof TokenScanner_MultiLineRule ) {
 						TokenScanner_MultiLineRule sml = (TokenScanner_MultiLineRule) ru;
 						String endSeq = sml.getEndSeq();
@@ -80,7 +80,7 @@
 								endSeq,
 								token,
 								sml.getEscapedBy() != null ? sml.getEscapedBy().charAt(0) : 0,
-								endSeq == null || endSeq.isEmpty())));
+								true)));
 					} else if( ru instanceof TokenScanner_CharacterRule ) {
 						TokenScanner_CharacterRule scr = (TokenScanner_CharacterRule) ru;
 						char[] c = new char[scr.getCharacterList().size()];
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.configuration.text/META-INF/MANIFEST.MF
index a06b836..d798c65 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text/META-INF/MANIFEST.MF
@@ -2,19 +2,19 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Text
 Bundle-SymbolicName: org.eclipse.fx.code.editor.configuration.text
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject;version="1.0.0",
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.configuration;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.function;version="2.6.0",
- org.eclipse.fx.text.rules;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.function;version="3.0.0",
+ org.eclipse.fx.text.rules;version="3.0.0",
  org.eclipse.jface.text.rules,
  org.osgi.service.component.annotations;version="1.2.0"
 Require-Bundle: org.eclipse.text;bundle-version="3.5.400"
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.configuration.text.internal.ConfigurationDocumentPartitionerProvider.xml
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.fx.code.editor.configuration.text;version="2.6.0"
+Export-Package: org.eclipse.fx.code.editor.configuration.text;version="3.0.0"
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text/pom.xml b/bundles/code/org.eclipse.fx.code.editor.configuration.text/pom.xml
index 4e29c50..0e17e84 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration.text/src/org/eclipse/fx/code/editor/configuration/text/internal/ConfigurationRuleBasedPartitionScanner.java b/bundles/code/org.eclipse.fx.code.editor.configuration.text/src/org/eclipse/fx/code/editor/configuration/text/internal/ConfigurationRuleBasedPartitionScanner.java
index 00365e9..711788e 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration.text/src/org/eclipse/fx/code/editor/configuration/text/internal/ConfigurationRuleBasedPartitionScanner.java
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration.text/src/org/eclipse/fx/code/editor/configuration/text/internal/ConfigurationRuleBasedPartitionScanner.java
@@ -46,12 +46,12 @@
 						PartitionRule_SingleLine sr = (PartitionRule_SingleLine) r;
 						String endSeq = sr.getEndSeq();
 						String escapeSeq = sr.getEscapedBy();
-						pr.add( (IPredicateRule) Util.wrap(r.getCheck(),new SingleLineRule(sr.getStartSeq(), endSeq, new Token(p.getName()), escapeSeq != null ? escapeSeq.charAt(0) : 0, endSeq == null || endSeq.isEmpty())));
+						pr.add( (IPredicateRule) Util.wrap(r.getCheck(),new SingleLineRule(sr.getStartSeq(), endSeq, new Token(p.getName()), escapeSeq != null ? escapeSeq.charAt(0) : 0, true)));
 					} else if( r instanceof PartitionRule_MultiLine ) {
 						PartitionRule_MultiLine mr = (PartitionRule_MultiLine) r;
 						String endSeq = mr.getEndSeq();
 						String escapeSeq = mr.getEscapedBy();
-						pr.add( (IPredicateRule) Util.wrap(r.getCheck(), new MultiLineRule(mr.getStartSeq(), endSeq, new Token(p.getName()), escapeSeq != null ? escapeSeq.charAt(0) : 0, endSeq == null || endSeq.isEmpty())));
+						pr.add( (IPredicateRule) Util.wrap(r.getCheck(), new MultiLineRule(mr.getStartSeq(), endSeq, new Token(p.getName()), escapeSeq != null ? escapeSeq.charAt(0) : 0, true)));
 					} else if( r instanceof PartitionRule_JavaScript ) {
 						PartitionRule_JavaScript jr = (PartitionRule_JavaScript) r;
 
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.configuration/META-INF/MANIFEST.MF
index 07ac7d5..8872fa2 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Configuration
 Bundle-SymbolicName: org.eclipse.fx.code.editor.configuration
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ClassPath: .
-Export-Package: org.eclipse.fx.code.editor.configuration;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor.configuration;version="3.0.0";x-internal:=true
 Require-Bundle: com.google.gson;bundle-version="2.2.4"
diff --git a/bundles/code/org.eclipse.fx.code.editor.configuration/pom.xml b/bundles/code/org.eclipse.fx.code.editor.configuration/pom.xml
index 3837c6d..4aff34c 100644
--- a/bundles/code/org.eclipse.fx.code.editor.configuration/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.configuration/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.e4/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.e4/META-INF/MANIFEST.MF
index b5259b3..833aad3 100644
--- a/bundles/code/org.eclipse.fx.code.editor.e4/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.e4/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic service APIs for an Editor into Eclipse 4
 Bundle-SymbolicName: org.eclipse.fx.code.editor.e4
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Vendor: Eclipse.org
-Export-Package: org.eclipse.fx.code.editor.e4;version="2.6.0";x-internal:=true,
- org.eclipse.fx.code.editor.e4.addons;version="2.6.0";x-internal:=true,
- org.eclipse.fx.code.editor.e4.handlers;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor.e4;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.code.editor.e4.addons;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.code.editor.e4.handlers;version="3.0.0";x-internal:=true
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.4.0",
  org.eclipse.e4.core.di;bundle-version="1.5.0",
  org.eclipse.text;bundle-version="3.5.400",
@@ -17,12 +17,12 @@
  org.eclipse.e4.ui.di;bundle-version="1.1.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject;version="1.0.0",
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.di.context;version="2.6.0",
- org.eclipse.fx.core.event;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.di.context;version="3.0.0",
+ org.eclipse.fx.core.event;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.e4.internal.DocumentPartitionerContextFunction.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.e4.internal.AnnotationModelContextFunction.xml,
diff --git a/bundles/code/org.eclipse.fx.code.editor.e4/pom.xml b/bundles/code/org.eclipse.fx.code.editor.e4/pom.xml
index 360d580..f109db8 100644
--- a/bundles/code/org.eclipse.fx.code.editor.e4/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx.e4/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.fx.e4/META-INF/MANIFEST.MF
index b7d24f0..c630777 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx.e4/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.fx.e4/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Integration the JavaFX code editor into Eclipse 4
 Bundle-SymbolicName: org.eclipse.fx.code.editor.fx.e4
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.4.0",
@@ -15,18 +15,18 @@
  org.eclipse.fx.text.ui,
  org.eclipse.fx.ui.workbench.renderers.base
 Import-Package: javax.inject,
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.e4;version="2.6.0",
- org.eclipse.fx.code.editor.fx.services;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.di.context;version="2.6.0",
- org.eclipse.fx.text.ui.presentation;version="2.6.0",
- org.eclipse.fx.text.ui.source;version="2.6.0",
- org.eclipse.fx.ui.workbench.base.rendering;version="2.6.0",
- org.eclipse.fx.ui.workbench.services;version="2.6.0",
- org.eclipse.fx.ui.workbench.services.lifecycle;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.e4;version="3.0.0",
+ org.eclipse.fx.code.editor.fx.services;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.di.context;version="3.0.0",
+ org.eclipse.fx.text.ui.presentation;version="3.0.0",
+ org.eclipse.fx.text.ui.source;version="3.0.0",
+ org.eclipse.fx.ui.workbench.base.rendering;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services.lifecycle;version="3.0.0",
  org.osgi.service.component.annotations;resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.fx.e4.internal.SourceViewerConfigurationContextFunction.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.fx.e4.internal.PresentationReconcilerContextFunction.xml,
@@ -42,4 +42,4 @@
  OSGI-INF/services/org.eclipse.fx.code.editor.fx.e4.internal.ContextInformationValidatorTypeProviderCF.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.fx.e4.internal.SnippetEditorPartTabContextMenuService.xml
 Bundle-Vendor: Eclipse.org
-Export-Package: org.eclipse.fx.code.editor.fx.e4;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor.fx.e4;version="3.0.0";x-internal:=true
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx.e4/pom.xml b/bundles/code/org.eclipse.fx.code.editor.fx.e4/pom.xml
index 3944ed3..74e1f8a 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx.e4/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.fx.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx.themes/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.fx.themes/META-INF/MANIFEST.MF
index a54b1ff..aa8cba3 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx.themes/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.fx.themes/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic editor Themes
 Bundle-SymbolicName: org.eclipse.fx.code.editor.fx.themes
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.fx.ui.services.theme;version="2.6.0",
+Import-Package: org.eclipse.fx.ui.services.theme;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.fx.themes.internal.DefaultEditorStylesheet.xml
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.fx.code.editor.fx.themes;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor.fx.themes;version="3.0.0";x-internal:=true
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx.themes/pom.xml b/bundles/code/org.eclipse.fx.code.editor.fx.themes/pom.xml
index a1a67dd..439550f 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx.themes/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.fx.themes/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.fx/META-INF/MANIFEST.MF
index 433a057..0e51c8f 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.fx/META-INF/MANIFEST.MF
@@ -2,30 +2,30 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic editor APIs for JavaFX
 Bundle-SymbolicName: org.eclipse.fx.code.editor.fx
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: com.google.common.collect;version="15.0.0",
  javax.inject,
  org.eclipse.e4.ui.di,
- org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.adapter;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.event;version="2.6.0",
- org.eclipse.fx.core.preferences;version="2.6.0",
- org.eclipse.fx.core.text;version="2.6.0",
+ org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.adapter;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.event;version="3.0.0",
+ org.eclipse.fx.core.preferences;version="3.0.0",
+ org.eclipse.fx.core.text;version="3.0.0",
  org.eclipse.fx.text.hover,
  org.eclipse.fx.text.navigation,
- org.eclipse.fx.text.rules;version="2.6.0",
- org.eclipse.fx.text.ui;version="2.6.0",
- org.eclipse.fx.text.ui.contentassist;version="2.6.0",
- org.eclipse.fx.text.ui.presentation;version="2.6.0",
- org.eclipse.fx.text.ui.rules;version="2.6.0",
- org.eclipse.fx.text.ui.source;version="2.6.0",
- org.eclipse.fx.ui.controls.filesystem;version="2.6.0",
- org.eclipse.fx.ui.controls.styledtext;version="2.6.0",
- org.eclipse.fx.ui.controls.tree;version="2.6.0",
+ org.eclipse.fx.text.rules;version="3.0.0",
+ org.eclipse.fx.text.ui;version="3.0.0",
+ org.eclipse.fx.text.ui.contentassist;version="3.0.0",
+ org.eclipse.fx.text.ui.presentation;version="3.0.0",
+ org.eclipse.fx.text.ui.rules;version="3.0.0",
+ org.eclipse.fx.text.ui.source;version="3.0.0",
+ org.eclipse.fx.ui.controls.filesystem;version="3.0.0",
+ org.eclipse.fx.ui.controls.styledtext;version="3.0.0",
+ org.eclipse.fx.ui.controls.tree;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Require-Bundle: org.eclipse.e4.core.di.annotations;bundle-version="1.4.0",
  org.eclipse.text;bundle-version="3.5.400",
@@ -34,6 +34,6 @@
  OSGI-INF/services/org.eclipse.fx.code.editor.fx.services.internal.NoHighlightPresentationReconcilerTypeProvider.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.fx.services.internal.SystemEditorFontProvider.xml
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.fx.code.editor.fx;version="2.6.0";x-internal:=true,
- org.eclipse.fx.code.editor.fx.services;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor.fx;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.code.editor.fx.services;version="3.0.0";x-internal:=true
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/code/org.eclipse.fx.code.editor.fx/pom.xml b/bundles/code/org.eclipse.fx.code.editor.fx/pom.xml
index 8c40487..0c06c05 100644
--- a/bundles/code/org.eclipse.fx.code.editor.fx/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.fx/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/META-INF/MANIFEST.MF
index 76a6c78..bff24d6 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Contrib
 Bundle-SymbolicName: org.eclipse.fx.code.editor.langs.contrib
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.fx.code.editor;version="2.6.0",
- org.eclipse.fx.code.editor.configuration;version="2.6.0",
- org.eclipse.fx.code.editor.configuration.text;version="2.6.0",
- org.eclipse.fx.code.editor.services;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
+Import-Package: org.eclipse.fx.code.editor;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration;version="3.0.0",
+ org.eclipse.fx.code.editor.configuration.text;version="3.0.0",
+ org.eclipse.fx.code.editor.services;version="3.0.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.langs.contrib.LangsConfigurationModelProvider.xml
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/pom.xml b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/pom.xml
index afc31a4..84bb341 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/src/org/eclipse/fx/code/editor/langs/contrib/LangsConfigurationModelProvider.java b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/src/org/eclipse/fx/code/editor/langs/contrib/LangsConfigurationModelProvider.java
index eafd250..7ce4456 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.contrib/src/org/eclipse/fx/code/editor/langs/contrib/LangsConfigurationModelProvider.java
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.contrib/src/org/eclipse/fx/code/editor/langs/contrib/LangsConfigurationModelProvider.java
@@ -76,6 +76,7 @@
 		prefix("ts","platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/ts.json").ifPresent(urlList::add);
 		prefix("xml","platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/xml.json").ifPresent(urlList::add);
 		prefix("html","platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/xml.json").ifPresent(urlList::add);
+		prefix("sh","platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/sh.json").ifPresent(urlList::add);
 	}
 
 	private static final Optional<Function<Input<?>, URL>> prefix(String prefix, String url) {
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.themes/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.langs.themes/META-INF/MANIFEST.MF
index 0a0798e..8c0e6c2 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.themes/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.themes/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Themes
 Bundle-SymbolicName: org.eclipse.fx.code.editor.langs.themes
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0",
+Import-Package: org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.langs.themes.DefaultEditorStylesheets.xml
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="2.0.100";resolution:=optional
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.themes/pom.xml b/bundles/code/org.eclipse.fx.code.editor.langs.themes/pom.xml
index 45eb646..9b60b78 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.themes/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.themes/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs.themes/src/org/eclipse/fx/code/editor/langs/themes/DefaultEditorStylesheets.java b/bundles/code/org.eclipse.fx.code.editor.langs.themes/src/org/eclipse/fx/code/editor/langs/themes/DefaultEditorStylesheets.java
index 794b9fb..f26e772 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs.themes/src/org/eclipse/fx/code/editor/langs/themes/DefaultEditorStylesheets.java
+++ b/bundles/code/org.eclipse.fx.code.editor.langs.themes/src/org/eclipse/fx/code/editor/langs/themes/DefaultEditorStylesheets.java
@@ -34,6 +34,7 @@
 		Util.createUrl("platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/swift.css", true).ifPresent(stylesheets::add);
 		Util.createUrl("platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/ts.css", true).ifPresent(stylesheets::add);
 		Util.createUrl("platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/xml.css", true).ifPresent(stylesheets::add);
+		Util.createUrl("platform:/plugin/org.eclipse.fx.code.editor.langs/org/eclipse/fx/code/editor/ldef/langs/sh.css", true).ifPresent(stylesheets::add);
 		this.stylesheets = stylesheets;
 	}
 
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.langs/META-INF/MANIFEST.MF
index 3c452e6..c81640d 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Various basic language definitions
 Bundle-SymbolicName: org.eclipse.fx.code.editor.langs 
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.osgi.service.component.annotations;version="[1.2.0,2.0.0)";resolution:=optional
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/pom.xml b/bundles/code/org.eclipse.fx.code.editor.langs/pom.xml
index 46fc142..2bebc27 100644
--- a/bundles/code/org.eclipse.fx.code.editor.langs/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh-swt-style.json b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh-swt-style.json
new file mode 100644
index 0000000..2bb7a91
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh-swt-style.json
@@ -0,0 +1,34 @@
+{
+  "$gtype": "StylesheetDefinition",
+  "colorList": [],
+  "elementList": [
+	{
+	  "$gtype": "StyleDefinition",
+	  "bold": false,
+	  "italic": false,
+	  "name": "sh.sh_default",
+	  "textRefColor": "-source-editor-code"
+	},
+	{
+	  "$gtype": "StyleDefinition",
+	  "bold": true,
+	  "italic": false,
+	  "name": "sh.sh_common_executables",
+	  "textRefColor": "-source-editor-code"
+	},
+	{
+	  "$gtype": "StyleDefinition",
+	  "bold": false,
+	  "italic": false,
+	  "name": "sh.sh_doc_default",
+	  "textRefColor": "-source-editor-doc"
+	},
+	{
+	  "$gtype": "StyleDefinition",
+	  "bold": false,
+	  "italic": false,
+	  "name": "sh.sh_string",
+	  "textRefColor": "-source-editor-string"
+	}
+	]
+}
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.css b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.css
new file mode 100644
index 0000000..297815d
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.css
@@ -0,0 +1,17 @@
+.styled-text-area .sh.sh_default {
+	-styled-text-color: -source-editor-code;
+}
+
+.styled-text-area .sh.sh_common_executables {
+	-styled-text-color: -source-editor-code;
+	-fx-font-weight: bold;
+}
+
+.styled-text-area .sh.sh_doc_default {
+	-styled-text-color: -source-editor-doc;
+}
+
+.styled-text-area .sh.sh_string {
+	-styled-text-color: -source-editor-string;
+}
+
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.json b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.json
new file mode 100644
index 0000000..09c8a45
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/src-gen/org/eclipse/fx/code/editor/ldef/langs/sh.json
@@ -0,0 +1,100 @@
+{
+  "$gtype": "LanguageDef",
+  "fileSuffix": "sh",
+  "partitionList": [
+    {
+      "$gtype": "Partition",
+      "name": "__dftl_partition_content_type",
+      "ruleList": [],
+      "tokenList": [
+        {
+          "$gtype": "Token",
+          "defaultToken": true,
+          "name": "sh_default",
+          "tokenScannerList": []
+        },
+        {
+          "$gtype": "Token",
+          "defaultToken": false,
+          "name": "sh_number",
+          "tokenScannerList": [
+            {
+              "$gtype": "TokenScanner_PatternRule",
+              "containmentPattern": "[\\d|\\.]",
+              "startLength": 0,
+              "startPattern": "\\d"
+            }
+          ]
+        },
+        {
+          "$gtype": "Token",
+          "defaultToken": false,
+          "name": "sh_common_executables",
+          "tokenScannerList": [
+            {
+              "$gtype": "TokenScanner_Keyword",
+              "keywordList": [
+                "rm",
+                "cd",
+                "rmdir",
+                "java",
+                "javac",
+                "echo",
+                "jlink"
+              ]
+            }
+          ]
+        }
+      ],
+      "whitespace": {
+        "$gtype": "PartitionWhiteSpace",
+        "characterList": [],
+        "javawhiteSpace": true
+      }
+    },
+    {
+      "$gtype": "Partition",
+      "name": "__sh_single_line_comment",
+      "ruleList": [
+        {
+          "$gtype": "PartitionRule_SingleLine",
+          "startSeq": "#"
+        }
+      ],
+      "tokenList": [
+        {
+          "$gtype": "Token",
+          "defaultToken": true,
+          "name": "sh_doc_default",
+          "tokenScannerList": []
+        }
+      ]
+    },
+    {
+      "$gtype": "Partition",
+      "name": "__sh_string",
+      "ruleList": [
+        {
+          "$gtype": "PartitionRule_SingleLine",
+          "endSeq": "\u0027",
+          "escapedBy": "\\",
+          "startSeq": "\u0027"
+        },
+        {
+          "$gtype": "PartitionRule_SingleLine",
+          "endSeq": "\"",
+          "escapedBy": "\\",
+          "startSeq": "\""
+        }
+      ],
+      "tokenList": [
+        {
+          "$gtype": "Token",
+          "defaultToken": true,
+          "name": "sh_string",
+          "tokenScannerList": []
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/bundles/code/org.eclipse.fx.code.editor.langs/src/org/eclipse/fx/code/editor/ldef/langs/bash.ldef b/bundles/code/org.eclipse.fx.code.editor.langs/src/org/eclipse/fx/code/editor/ldef/langs/bash.ldef
new file mode 100644
index 0000000..23acdb4
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor.langs/src/org/eclipse/fx/code/editor/ldef/langs/bash.ldef
@@ -0,0 +1,44 @@
+package org.eclipse.fx.code.editor.ldef.langs
+
+sh {
+	partitioning {
+		partition __dftl_partition_content_type
+		partition __sh_single_line_comment
+		partition __sh_string
+		rule {
+			single_line __sh_single_line_comment 	"#"
+			single_line __sh_string 				"'"	 	=> "'" escaped by "\\"
+			single_line __sh_string 				'"' 	=> '"' escaped by "\\"
+		}
+	}
+	lexical_highlighting {
+		rule __dftl_partition_content_type whitespace javawhitespace {
+			default sh_default
+			sh_number {
+				pattern "\\d" containing "[\\d|\\.]"
+			}
+			sh_common_executables {
+				keywords [ "rm", "cd", "rmdir", "java", "javac", "echo", "jlink" ]
+			}
+		}
+		rule __sh_single_line_comment {
+			default sh_doc_default
+		}
+		rule __sh_string {
+			default sh_string
+		}
+		token_def {
+			sh_default "-source-editor-code";
+			sh_common_executables "-source-editor-code" bold;
+			sh_doc_default "-source-editor-doc";
+			sh_string "-source-editor-string";
+		}
+	}
+//	integration {
+//		javafx {
+//			java "org.eclipse.fx.code.editor.langs.codegen.fx.js" {
+//				project : "org.eclipse.fx.code.editor.langs.codegen.fx"
+//			}
+//		}
+//	}
+}
\ No newline at end of file
diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef.ui/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.ldef.ui/META-INF/MANIFEST.MF
index 3793107..0100e1b 100644
--- a/bundles/code/org.eclipse.fx.code.editor.ldef.ui/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: Language DSL Eclipse Editor

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.code.editor.ldef.ui; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.code.editor.ldef;bundle-version="2.3.0";visibility:=reexport,

diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef.ui/pom.xml b/bundles/code/org.eclipse.fx.code.editor.ldef.ui/pom.xml
index faa4b52..130ad96 100755
--- a/bundles/code/org.eclipse.fx.code.editor.ldef.ui/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor.ldef/META-INF/MANIFEST.MF
index dc3ebc2..ad35575 100644
--- a/bundles/code/org.eclipse.fx.code.editor.ldef/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: Language Editor DSL

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.code.editor.ldef; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;visibility:=reexport,

@@ -17,16 +17,16 @@
  org.eclipse.fx.code.editor.configuration;bundle-version="2.3.0"

 Import-Package: org.apache.log4j

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

-Export-Package: org.eclipse.fx.code.editor.ldef;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.formatting;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.generator;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.lDef;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.lDef.impl;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.lDef.util;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.parser.antlr;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.parser.antlr.internal;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.scoping;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.serializer;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.services;version="2.4.0";x-internal:=true,

- org.eclipse.fx.code.editor.ldef.validation;version="2.4.0";x-internal:=true

+Export-Package: org.eclipse.fx.code.editor.ldef;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.formatting;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.generator;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.lDef;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.lDef.impl;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.lDef.util;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.parser.antlr;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.parser.antlr.internal;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.scoping;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.serializer;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.services;version="3.0.0";x-internal:=true,

+ org.eclipse.fx.code.editor.ldef.validation;version="3.0.0";x-internal:=true

 

diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef/pom.xml b/bundles/code/org.eclipse.fx.code.editor.ldef/pom.xml
index c56aa0f..fffb7f8 100644
--- a/bundles/code/org.eclipse.fx.code.editor.ldef/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/.JSONConfigurationConfigurator.xtendbin b/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/.JSONConfigurationConfigurator.xtendbin
index 6435633..4fac9b3 100644
--- a/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/.JSONConfigurationConfigurator.xtendbin
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/.JSONConfigurationConfigurator.xtendbin
Binary files differ
diff --git a/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/JSONConfigurationConfigurator.java b/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/JSONConfigurationConfigurator.java
index 3784473..55b30fb 100644
--- a/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/JSONConfigurationConfigurator.java
+++ b/bundles/code/org.eclipse.fx.code.editor.ldef/xtend-gen/org/eclipse/fx/code/editor/ldef/generator/JSONConfigurationConfigurator.java
@@ -4,60 +4,29 @@
 import com.google.common.collect.Iterables;
 import java.util.Collections;
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.function.Function;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.fx.code.editor.configuration.CompositeCondition;
+import org.eclipse.fx.code.editor.configuration.Check;
 import org.eclipse.fx.code.editor.configuration.Condition;
 import org.eclipse.fx.code.editor.configuration.EditorGModel;
-import org.eclipse.fx.code.editor.configuration.EqualsCondition;
-import org.eclipse.fx.code.editor.configuration.ExistsCondition;
 import org.eclipse.fx.code.editor.configuration.Partition;
 import org.eclipse.fx.code.editor.configuration.PartitionRule;
-import org.eclipse.fx.code.editor.configuration.PartitionRule_DynamicEnd;
-import org.eclipse.fx.code.editor.configuration.PartitionRule_MultiLine;
-import org.eclipse.fx.code.editor.configuration.PartitionRule_SingleLine;
 import org.eclipse.fx.code.editor.configuration.PartitionWhiteSpace;
 import org.eclipse.fx.code.editor.configuration.Token;
 import org.eclipse.fx.code.editor.configuration.TokenScanner;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_CharacterRule;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_DynamicEnd;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_Keyword;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_MultiLineRule;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_PatternRule;
-import org.eclipse.fx.code.editor.configuration.TokenScanner_SingleLineRule;
 import org.eclipse.fx.code.editor.ldef.LDefStandaloneSetup;
-import org.eclipse.fx.code.editor.ldef.lDef.Check;
 import org.eclipse.fx.code.editor.ldef.lDef.Equals;
-import org.eclipse.fx.code.editor.ldef.lDef.Keyword;
 import org.eclipse.fx.code.editor.ldef.lDef.LanguageDef;
 import org.eclipse.fx.code.editor.ldef.lDef.LexicalHighlighting;
 import org.eclipse.fx.code.editor.ldef.lDef.LexicalPartitionHighlighting;
 import org.eclipse.fx.code.editor.ldef.lDef.LexicalPartitionHighlighting_Rule;
 import org.eclipse.fx.code.editor.ldef.lDef.Paritioning;
-import org.eclipse.fx.code.editor.ldef.lDef.Partition_JSRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Partition_MultiLineRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Partition_Rule;
-import org.eclipse.fx.code.editor.ldef.lDef.Partition_SingleLineRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Partitioner;
-import org.eclipse.fx.code.editor.ldef.lDef.Partitioner_Rule;
 import org.eclipse.fx.code.editor.ldef.lDef.Range;
 import org.eclipse.fx.code.editor.ldef.lDef.Root;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner;
-import org.eclipse.fx.code.editor.ldef.lDef.ScannerCondition;
-import org.eclipse.fx.code.editor.ldef.lDef.ScannerConditionComposite;
-import org.eclipse.fx.code.editor.ldef.lDef.ScannerConditionEquals;
-import org.eclipse.fx.code.editor.ldef.lDef.ScannerConditionExists;
-import org.eclipse.fx.code.editor.ldef.lDef.ScannerConditionJs;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner_CharacterRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner_Keyword;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner_MultiLineRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner_PatternRule;
-import org.eclipse.fx.code.editor.ldef.lDef.Scanner_SingleLineRule;
 import org.eclipse.fx.code.editor.ldef.lDef.WhitespaceRule;
 import org.eclipse.xtext.generator.IFileSystemAccess;
 import org.eclipse.xtext.xbase.lib.Functions.Function1;
@@ -145,84 +114,9 @@
   }
   
   public List<PartitionRule> ruleList(final EditorGModel m, final LanguageDef model, final org.eclipse.fx.code.editor.ldef.lDef.Partition pr) {
-    Paritioning _paritioning = model.getParitioning();
-    Partitioner _partitioner = _paritioning.getPartitioner();
-    final Partitioner_Rule tmp = ((Partitioner_Rule) _partitioner);
-    EList<Partition_Rule> _ruleList = tmp.getRuleList();
-    final Function1<Partition_Rule, Boolean> _function = (Partition_Rule prl) -> {
-      org.eclipse.fx.code.editor.ldef.lDef.Partition _parition = prl.getParition();
-      return Boolean.valueOf(Objects.equal(_parition, pr));
-    };
-    Iterable<Partition_Rule> _filter = IterableExtensions.<Partition_Rule>filter(_ruleList, _function);
-    final Function1<Partition_Rule, PartitionRule> _function_1 = (Partition_Rule prl) -> {
-      Object _xifexpression = null;
-      if ((prl instanceof Partition_SingleLineRule)) {
-        String _startPattern = ((Partition_SingleLineRule)prl).getStartPattern();
-        boolean _notEquals = (!Objects.equal(_startPattern, null));
-        if (_notEquals) {
-          PartitionRule_DynamicEnd.Builder _PartitionRule_DynamicEndBuilder = m.PartitionRule_DynamicEndBuilder();
-          String _startSeq = ((Partition_SingleLineRule)prl).getStartSeq();
-          PartitionRule_DynamicEnd.Builder _beginPrefix = _PartitionRule_DynamicEndBuilder.beginPrefix(_startSeq);
-          String _startPattern_1 = ((Partition_SingleLineRule)prl).getStartPattern();
-          PartitionRule_DynamicEnd.Builder _beginMatch = _beginPrefix.beginMatch(_startPattern_1);
-          String _startSuffix = ((Partition_SingleLineRule)prl).getStartSuffix();
-          PartitionRule_DynamicEnd.Builder _beginSuffix = _beginMatch.beginSuffix(_startSuffix);
-          String _endSeq = ((Partition_SingleLineRule)prl).getEndSeq();
-          PartitionRule_DynamicEnd.Builder _endTemplate = _beginSuffix.endTemplate(_endSeq);
-          PartitionRule_DynamicEnd.Builder _singleLine = _endTemplate.singleLine(true);
-          return _singleLine.build();
-        } else {
-          PartitionRule_SingleLine.Builder _PartitionRule_SingleLineBuilder = m.PartitionRule_SingleLineBuilder();
-          String _startSeq_1 = ((Partition_SingleLineRule)prl).getStartSeq();
-          PartitionRule_SingleLine.Builder _startSeq_2 = _PartitionRule_SingleLineBuilder.startSeq(_startSeq_1);
-          String _endSeq_1 = ((Partition_SingleLineRule)prl).getEndSeq();
-          PartitionRule_SingleLine.Builder _endSeq_2 = _startSeq_2.endSeq(_endSeq_1);
-          String _escapeSeq = ((Partition_SingleLineRule)prl).getEscapeSeq();
-          PartitionRule_SingleLine.Builder _escapedBy = _endSeq_2.escapedBy(_escapeSeq);
-          return _escapedBy.build();
-        }
-      } else {
-        Object _xifexpression_1 = null;
-        if ((prl instanceof Partition_MultiLineRule)) {
-          String _startPattern_2 = ((Partition_MultiLineRule)prl).getStartPattern();
-          boolean _notEquals_1 = (!Objects.equal(_startPattern_2, null));
-          if (_notEquals_1) {
-            PartitionRule_DynamicEnd.Builder _PartitionRule_DynamicEndBuilder_1 = m.PartitionRule_DynamicEndBuilder();
-            String _startSeq_3 = ((Partition_MultiLineRule)prl).getStartSeq();
-            PartitionRule_DynamicEnd.Builder _beginPrefix_1 = _PartitionRule_DynamicEndBuilder_1.beginPrefix(_startSeq_3);
-            String _startPattern_3 = ((Partition_MultiLineRule)prl).getStartPattern();
-            PartitionRule_DynamicEnd.Builder _beginMatch_1 = _beginPrefix_1.beginMatch(_startPattern_3);
-            String _startSuffix_1 = ((Partition_MultiLineRule)prl).getStartSuffix();
-            PartitionRule_DynamicEnd.Builder _beginSuffix_1 = _beginMatch_1.beginSuffix(_startSuffix_1);
-            String _endSeq_3 = ((Partition_MultiLineRule)prl).getEndSeq();
-            PartitionRule_DynamicEnd.Builder _endTemplate_1 = _beginSuffix_1.endTemplate(_endSeq_3);
-            PartitionRule_DynamicEnd.Builder _singleLine_1 = _endTemplate_1.singleLine(false);
-            return _singleLine_1.build();
-          } else {
-            PartitionRule_MultiLine.Builder _PartitionRule_MultiLineBuilder = m.PartitionRule_MultiLineBuilder();
-            String _startSeq_4 = ((Partition_MultiLineRule)prl).getStartSeq();
-            PartitionRule_MultiLine.Builder _startSeq_5 = _PartitionRule_MultiLineBuilder.startSeq(_startSeq_4);
-            String _endSeq_4 = ((Partition_MultiLineRule)prl).getEndSeq();
-            PartitionRule_MultiLine.Builder _endSeq_5 = _startSeq_5.endSeq(_endSeq_4);
-            String _escapeSeq_1 = ((Partition_MultiLineRule)prl).getEscapeSeq();
-            PartitionRule_MultiLine.Builder _escapedBy_1 = _endSeq_5.escapedBy(_escapeSeq_1);
-            return _escapedBy_1.build();
-          }
-        } else {
-          Object _xifexpression_2 = null;
-          if ((prl instanceof Partition_JSRule)) {
-            _xifexpression_2 = null;
-          } else {
-            throw new IllegalStateException((("Unknown rule \'" + prl) + "\'"));
-          }
-          _xifexpression_1 = _xifexpression_2;
-        }
-        _xifexpression = _xifexpression_1;
-      }
-      return ((PartitionRule)_xifexpression);
-    };
-    Iterable<PartitionRule> _map = IterableExtensions.<Partition_Rule, PartitionRule>map(_filter, _function_1);
-    return IterableExtensions.<PartitionRule>toList(_map);
+    throw new Error("Unresolved compilation problems:"
+      + "\nPartition_JSRule cannot be resolved to a type."
+      + "\nUnreachable code: The if condition can never match. It is already handled by a previous condition.");
   }
   
   public List<Token> tokenList(final EditorGModel m, final LanguageDef model, final org.eclipse.fx.code.editor.ldef.lDef.Partition pr) {
@@ -261,175 +155,44 @@
   }
   
   public List<TokenScanner> tokenScannerList(final EditorGModel m, final org.eclipse.fx.code.editor.ldef.lDef.Token t) {
-    EList<Scanner> _scannerList = t.getScannerList();
-    final Function1<Scanner, TokenScanner> _function = (Scanner ts) -> {
-      if ((ts instanceof Scanner_Keyword)) {
-        final Scanner_Keyword sk = ((Scanner_Keyword) ts);
-        TokenScanner_Keyword.Builder _TokenScanner_KeywordBuilder = m.TokenScanner_KeywordBuilder();
-        ScannerCondition _enabledIf = ((Scanner_Keyword)ts).getEnabledIf();
-        Condition _createCondition = this.createCondition(m, _enabledIf);
-        TokenScanner_Keyword.Builder _condition = _TokenScanner_KeywordBuilder.condition(_createCondition);
-        EList<Keyword> _keywords = sk.getKeywords();
-        final Function1<Keyword, String> _function_1 = (Keyword k) -> {
-          return k.getName();
-        };
-        List<String> _map = ListExtensions.<Keyword, String>map(_keywords, _function_1);
-        List<String> _list = IterableExtensions.<String>toList(_map);
-        TokenScanner_Keyword.Builder _keywordList = _condition.keywordList(_list);
-        return _keywordList.build();
-      } else {
-        if ((ts instanceof Scanner_SingleLineRule)) {
-          String _startPattern = ((Scanner_SingleLineRule)ts).getStartPattern();
-          boolean _notEquals = (!Objects.equal(_startPattern, null));
-          if (_notEquals) {
-            TokenScanner_DynamicEnd.Builder _TokenScanner_DynamicEndBuilder = m.TokenScanner_DynamicEndBuilder();
-            String _startSeq = ((Scanner_SingleLineRule)ts).getStartSeq();
-            TokenScanner_DynamicEnd.Builder _beginPrefix = _TokenScanner_DynamicEndBuilder.beginPrefix(_startSeq);
-            String _startPattern_1 = ((Scanner_SingleLineRule)ts).getStartPattern();
-            TokenScanner_DynamicEnd.Builder _beginMatch = _beginPrefix.beginMatch(_startPattern_1);
-            String _endSeq = ((Scanner_SingleLineRule)ts).getEndSeq();
-            TokenScanner_DynamicEnd.Builder _endTemplate = _beginMatch.endTemplate(_endSeq);
-            TokenScanner_DynamicEnd.Builder _singleLine = _endTemplate.singleLine(true);
-            return _singleLine.build();
-          } else {
-            final Scanner_SingleLineRule sr = ((Scanner_SingleLineRule) ts);
-            TokenScanner_SingleLineRule.Builder _TokenScanner_SingleLineRuleBuilder = m.TokenScanner_SingleLineRuleBuilder();
-            Check _check = sr.getCheck();
-            org.eclipse.fx.code.editor.configuration.Check _createCheck = this.createCheck(m, _check);
-            TokenScanner_SingleLineRule.Builder _check_1 = _TokenScanner_SingleLineRuleBuilder.check(_createCheck);
-            ScannerCondition _enabledIf_1 = ((Scanner_SingleLineRule)ts).getEnabledIf();
-            Condition _createCondition_1 = this.createCondition(m, _enabledIf_1);
-            TokenScanner_SingleLineRule.Builder _condition_1 = _check_1.condition(_createCondition_1);
-            String _startSeq_1 = sr.getStartSeq();
-            TokenScanner_SingleLineRule.Builder _startSeq_2 = _condition_1.startSeq(_startSeq_1);
-            String _endSeq_1 = sr.getEndSeq();
-            TokenScanner_SingleLineRule.Builder _endSeq_2 = _startSeq_2.endSeq(_endSeq_1);
-            String _escapeSeq = sr.getEscapeSeq();
-            TokenScanner_SingleLineRule.Builder _escapedBy = _endSeq_2.escapedBy(_escapeSeq);
-            return _escapedBy.build();
-          }
-        } else {
-          if ((ts instanceof Scanner_MultiLineRule)) {
-            String _startPattern_2 = ((Scanner_MultiLineRule)ts).getStartPattern();
-            boolean _notEquals_1 = (!Objects.equal(_startPattern_2, null));
-            if (_notEquals_1) {
-              TokenScanner_DynamicEnd.Builder _TokenScanner_DynamicEndBuilder_1 = m.TokenScanner_DynamicEndBuilder();
-              String _startSeq_3 = ((Scanner_MultiLineRule)ts).getStartSeq();
-              TokenScanner_DynamicEnd.Builder _beginPrefix_1 = _TokenScanner_DynamicEndBuilder_1.beginPrefix(_startSeq_3);
-              String _startPattern_3 = ((Scanner_MultiLineRule)ts).getStartPattern();
-              TokenScanner_DynamicEnd.Builder _beginMatch_1 = _beginPrefix_1.beginMatch(_startPattern_3);
-              String _endSeq_3 = ((Scanner_MultiLineRule)ts).getEndSeq();
-              TokenScanner_DynamicEnd.Builder _endTemplate_1 = _beginMatch_1.endTemplate(_endSeq_3);
-              return _endTemplate_1.build();
-            } else {
-              final Scanner_MultiLineRule mr = ((Scanner_MultiLineRule) ts);
-              TokenScanner_MultiLineRule.Builder _TokenScanner_MultiLineRuleBuilder = m.TokenScanner_MultiLineRuleBuilder();
-              Check _check_2 = mr.getCheck();
-              org.eclipse.fx.code.editor.configuration.Check _createCheck_1 = this.createCheck(m, _check_2);
-              TokenScanner_MultiLineRule.Builder _check_3 = _TokenScanner_MultiLineRuleBuilder.check(_createCheck_1);
-              ScannerCondition _enabledIf_2 = ((Scanner_MultiLineRule)ts).getEnabledIf();
-              Condition _createCondition_2 = this.createCondition(m, _enabledIf_2);
-              TokenScanner_MultiLineRule.Builder _condition_2 = _check_3.condition(_createCondition_2);
-              String _startSeq_4 = mr.getStartSeq();
-              TokenScanner_MultiLineRule.Builder _startSeq_5 = _condition_2.startSeq(_startSeq_4);
-              String _endSeq_4 = mr.getEndSeq();
-              TokenScanner_MultiLineRule.Builder _endSeq_5 = _startSeq_5.endSeq(_endSeq_4);
-              String _escapeSeq_1 = mr.getEscapeSeq();
-              TokenScanner_MultiLineRule.Builder _escapedBy_1 = _endSeq_5.escapedBy(_escapeSeq_1);
-              return _escapedBy_1.build();
-            }
-          } else {
-            if ((ts instanceof Scanner_CharacterRule)) {
-              final Scanner_CharacterRule sc = ((Scanner_CharacterRule) ts);
-              TokenScanner_CharacterRule.Builder _TokenScanner_CharacterRuleBuilder = m.TokenScanner_CharacterRuleBuilder();
-              ScannerCondition _enabledIf_3 = ((Scanner_CharacterRule)ts).getEnabledIf();
-              Condition _createCondition_3 = this.createCondition(m, _enabledIf_3);
-              TokenScanner_CharacterRule.Builder _condition_3 = _TokenScanner_CharacterRuleBuilder.condition(_createCondition_3);
-              Check _check_4 = sc.getCheck();
-              org.eclipse.fx.code.editor.configuration.Check _createCheck_2 = this.createCheck(m, _check_4);
-              TokenScanner_CharacterRule.Builder _check_5 = _condition_3.check(_createCheck_2);
-              EList<String> _characters = sc.getCharacters();
-              TokenScanner_CharacterRule.Builder _characterList = _check_5.characterList(_characters);
-              return _characterList.build();
-            } else {
-              if ((ts instanceof Scanner_PatternRule)) {
-                final Scanner_PatternRule sp = ((Scanner_PatternRule) ts);
-                TokenScanner_PatternRule.Builder _TokenScanner_PatternRuleBuilder = m.TokenScanner_PatternRuleBuilder();
-                Check _check_6 = sp.getCheck();
-                org.eclipse.fx.code.editor.configuration.Check _createCheck_3 = this.createCheck(m, _check_6);
-                TokenScanner_PatternRule.Builder _check_7 = _TokenScanner_PatternRuleBuilder.check(_createCheck_3);
-                ScannerCondition _enabledIf_4 = ((Scanner_PatternRule)ts).getEnabledIf();
-                Condition _createCondition_4 = this.createCondition(m, _enabledIf_4);
-                TokenScanner_PatternRule.Builder _condition_4 = _check_7.condition(_createCondition_4);
-                int _length = sp.getLength();
-                TokenScanner_PatternRule.Builder _startLength = _condition_4.startLength(_length);
-                String _startPattern_4 = sp.getStartPattern();
-                TokenScanner_PatternRule.Builder _startPattern_5 = _startLength.startPattern(_startPattern_4);
-                String _contentPattern = sp.getContentPattern();
-                TokenScanner_PatternRule.Builder _containmentPattern = _startPattern_5.containmentPattern(_contentPattern);
-                return _containmentPattern.build();
-              }
-            }
-          }
-        }
-      }
-      return null;
-    };
-    return ListExtensions.<Scanner, TokenScanner>map(_scannerList, _function);
+    throw new Error("Unresolved compilation problems:"
+      + "\nThe method or field enabledIf is undefined for the type Scanner_Keyword"
+      + "\nThe method or field enabledIf is undefined for the type Scanner_SingleLineRule"
+      + "\nThe method or field enabledIf is undefined for the type Scanner_MultiLineRule"
+      + "\nThe method or field enabledIf is undefined for the type Scanner_CharacterRule"
+      + "\nThe method or field enabledIf is undefined for the type Scanner_PatternRule"
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition"
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition"
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition"
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition"
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition");
   }
   
-  public Condition createCondition(final EditorGModel m, final ScannerCondition c) {
-    EqualsCondition _xblockexpression = null;
-    {
-      boolean _equals = Objects.equal(c, null);
-      if (_equals) {
-        return null;
-      }
-      EqualsCondition _xifexpression = null;
-      if ((c instanceof ScannerConditionExists)) {
-        ExistsCondition.Builder _ExistsConditionBuilder = m.ExistsConditionBuilder();
-        String _key = ((ScannerConditionExists)c).getKey();
-        ExistsCondition.Builder _name = _ExistsConditionBuilder.name(_key);
-        return _name.build();
-      } else {
-        EqualsCondition _xifexpression_1 = null;
-        if ((c instanceof ScannerConditionEquals)) {
-          EqualsCondition.Builder _EqualsConditionBuilder = m.EqualsConditionBuilder();
-          String _key_1 = ((ScannerConditionEquals)c).getKey();
-          EqualsCondition.Builder _name_1 = _EqualsConditionBuilder.name(_key_1);
-          String _value = ((ScannerConditionEquals)c).getValue();
-          EqualsCondition.Builder _value_1 = _name_1.value(_value);
-          _xifexpression_1 = _value_1.build();
-        } else {
-          if ((c instanceof ScannerConditionJs)) {
-            return null;
-          } else {
-            if ((c instanceof ScannerConditionComposite)) {
-              CompositeCondition.Builder _CompositeConditionBuilder = m.CompositeConditionBuilder();
-              String _op = ((ScannerConditionComposite)c).getOp();
-              boolean _equals_1 = Objects.equal(_op, "and");
-              final CompositeCondition.Builder b = _CompositeConditionBuilder.and(_equals_1);
-              EList<ScannerCondition> _elements = ((ScannerConditionComposite)c).getElements();
-              final Function1<ScannerCondition, Condition> _function = (ScannerCondition e) -> {
-                return this.createCondition(m, e);
-              };
-              List<Condition> _map = ListExtensions.<ScannerCondition, Condition>map(_elements, _function);
-              final Consumer<Condition> _function_1 = (Condition c1) -> {
-                b.appendElementList(c1);
-              };
-              _map.forEach(_function_1);
-              return b.build();
-            }
-          }
-        }
-        _xifexpression = _xifexpression_1;
-      }
-      _xblockexpression = _xifexpression;
-    }
-    return _xblockexpression;
+  public Condition createCondition(final EditorGModel m, final /* ScannerCondition */Object c) {
+    throw new Error("Unresolved compilation problems:"
+      + "\nScannerConditionExists cannot be resolved to a type."
+      + "\nScannerConditionEquals cannot be resolved to a type."
+      + "\nScannerConditionJs cannot be resolved to a type."
+      + "\nScannerConditionComposite cannot be resolved to a type."
+      + "\nAmbiguous feature call.\nThe methods\n\tappendElementList(Condition) in Builder and\n\tappendElementList(Function<Builder, Condition>) in Builder\nboth match."
+      + "\nUnreachable code: The if condition can never match. It is already handled by a previous condition."
+      + "\nUnreachable code: The if condition can never match. It is already handled by a previous condition."
+      + "\nUnreachable code: The if condition can never match. It is already handled by a previous condition."
+      + "\nThere is no context to infer the closure\'s argument types from. Consider typing the arguments or put the closures into a typed context."
+      + "\nThe method createCondition(EditorGModel, ScannerCondition) from the type JSONConfigurationConfigurator refers to the missing type ScannerCondition"
+      + "\nThere is no context to infer the closure\'s argument types from. Consider typing the arguments or put the closures into a typed context."
+      + "\n== cannot be resolved"
+      + "\nkey cannot be resolved"
+      + "\nkey cannot be resolved"
+      + "\nvalue cannot be resolved"
+      + "\nop cannot be resolved"
+      + "\n== cannot be resolved"
+      + "\nelements cannot be resolved"
+      + "\nmap cannot be resolved"
+      + "\nforEach cannot be resolved");
   }
   
-  public org.eclipse.fx.code.editor.configuration.Check createCheck(final EditorGModel m, final Check c) {
+  public Check createCheck(final EditorGModel m, final org.eclipse.fx.code.editor.ldef.lDef.Check c) {
     boolean _equals = Objects.equal(c, null);
     if (_equals) {
       return null;
diff --git a/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
index 8eb4529..6f51574 100644
--- a/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
@@ -2,22 +2,22 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic service APIs for an Editor
 Bundle-SymbolicName: org.eclipse.fx.code.editor
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject,
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.adapter;version="2.6.0",
- org.eclipse.fx.core.event;version="2.6.0",
- org.eclipse.fx.core.function;version="2.6.0",
- org.eclipse.fx.core.text;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.adapter;version="3.0.0",
+ org.eclipse.fx.core.event;version="3.0.0",
+ org.eclipse.fx.core.function;version="3.0.0",
+ org.eclipse.fx.core.text;version="3.0.0",
  org.eclipse.fx.text.hover,
  org.eclipse.fx.text.navigation,
  org.eclipse.jface.text.rules,
  org.osgi.service.component.annotations;version="1.2.0"
 Require-Bundle: org.eclipse.text;bundle-version="3.5.400",
  org.eclipse.e4.core.di.annotations;bundle-version="1.4.0"
-Export-Package: org.eclipse.fx.code.editor;version="2.6.0";x-internal:=true,
- org.eclipse.fx.code.editor.services;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.code.editor;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.code.editor.services;version="3.0.0";x-internal:=true
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.URLToPathAdapterProvider.xml,
  OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.FileInputTypeProvider.xml,
diff --git a/bundles/code/org.eclipse.fx.code.editor/pom.xml b/bundles/code/org.eclipse.fx.code.editor/pom.xml
index e242258..9b1c635 100644
--- a/bundles/code/org.eclipse.fx.code.editor/pom.xml
+++ b/bundles/code/org.eclipse.fx.code.editor/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.text.compat/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.text.compat/META-INF/MANIFEST.MF
index 83abc40..372f20d 100644
--- a/bundles/code/org.eclipse.fx.text.compat/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.text.compat/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Compat
 Bundle-SymbolicName: org.eclipse.fx.text.compat
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.equinox.common;bundle-version="3.7.0",
  org.eclipse.text;bundle-version="3.5.400"
diff --git a/bundles/code/org.eclipse.fx.text.compat/pom.xml b/bundles/code/org.eclipse.fx.text.compat/pom.xml
index f5d0bb0..56fcba1 100644
--- a/bundles/code/org.eclipse.fx.text.compat/pom.xml
+++ b/bundles/code/org.eclipse.fx.text.compat/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.text.ui/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.text.ui/META-INF/MANIFEST.MF
index c57c9f0..8c89995 100644
--- a/bundles/code/org.eclipse.fx.text.ui/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.text.ui/META-INF/MANIFEST.MF
@@ -2,27 +2,27 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic JavaFX components
 Bundle-SymbolicName: org.eclipse.fx.text.ui
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.text;bundle-version="3.5.300",
  org.eclipse.jdt.annotation;bundle-version="2.0.0";resolution:=optional,
  org.eclipse.equinox.common;bundle-version="3.7.0",
  org.eclipse.fx.text.compat;bundle-version="2.3.0",
  org.eclipse.core.commands;bundle-version="3.7.0"
-Export-Package: org.eclipse.fx.text.ui;version="2.6.0";x-internal:=true,
- org.eclipse.fx.text.ui.contentassist;version="2.6.0";x-internal:=true,
- org.eclipse.fx.text.ui.presentation;version="2.6.0";x-internal:=true,
- org.eclipse.fx.text.ui.reconciler;version="2.6.0";x-internal:=true,
- org.eclipse.fx.text.ui.rules;version="2.6.0";x-internal:=true,
- org.eclipse.fx.text.ui.source;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.text.ui;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.text.ui.contentassist;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.text.ui.presentation;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.text.ui.reconciler;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.text.ui.rules;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.text.ui.source;version="3.0.0";x-internal:=true
 Bundle-Vendor: Eclipse.org
 Import-Package: com.google.common.collect;version="15.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.text;version="2.6.0",
- org.eclipse.fx.text.hover;version="2.6.0",
- org.eclipse.fx.text.navigation;version="2.6.0",
- org.eclipse.fx.ui.controls;version="2.6.0",
- org.eclipse.fx.ui.controls.list;version="2.6.0",
- org.eclipse.fx.ui.controls.styledtext;version="2.6.0",
- org.eclipse.fx.ui.controls.styledtext.events;version="2.6.0",
- org.eclipse.fx.ui.controls.styledtext.model;version="2.6.0"
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.text;version="3.0.0",
+ org.eclipse.fx.text.hover;version="3.0.0",
+ org.eclipse.fx.text.navigation;version="3.0.0",
+ org.eclipse.fx.ui.controls;version="3.0.0",
+ org.eclipse.fx.ui.controls.list;version="3.0.0",
+ org.eclipse.fx.ui.controls.styledtext;version="3.0.0",
+ org.eclipse.fx.ui.controls.styledtext.events;version="3.0.0",
+ org.eclipse.fx.ui.controls.styledtext.model;version="3.0.0"
diff --git a/bundles/code/org.eclipse.fx.text.ui/pom.xml b/bundles/code/org.eclipse.fx.text.ui/pom.xml
index 6c2975b..4297e59 100644
--- a/bundles/code/org.eclipse.fx.text.ui/pom.xml
+++ b/bundles/code/org.eclipse.fx.text.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/code/org.eclipse.fx.text.ui/src/org/eclipse/fx/text/ui/source/SourceViewer.java b/bundles/code/org.eclipse.fx.text.ui/src/org/eclipse/fx/text/ui/source/SourceViewer.java
index fd93679..d931b79 100644
--- a/bundles/code/org.eclipse.fx.text.ui/src/org/eclipse/fx/text/ui/source/SourceViewer.java
+++ b/bundles/code/org.eclipse.fx.text.ui/src/org/eclipse/fx/text/ui/source/SourceViewer.java
@@ -179,7 +179,7 @@
 		getTextWidget().setQuickLinkCallback(configuration.getQuicklinkCallback());
 
 		this.assistant = configuration.getContentAssist();
-		
+
 		configureHoverSize(configuration::getHoverWindowSize, configuration::storeHoverWindowSize);
 	}
 
diff --git a/bundles/code/org.eclipse.fx.text/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.text/META-INF/MANIFEST.MF
index 9b417c6..05d8979 100644
--- a/bundles/code/org.eclipse.fx.text/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.text/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Basic Text extension
 Bundle-SymbolicName: org.eclipse.fx.text
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.text.hover;version="2.6.0",
- org.eclipse.fx.text.navigation;version="2.6.0",
- org.eclipse.fx.text.rules;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.text.hover;version="3.0.0",
+ org.eclipse.fx.text.navigation;version="3.0.0",
+ org.eclipse.fx.text.rules;version="3.0.0";x-internal:=true
 Require-Bundle: org.eclipse.text;bundle-version="3.5.300",
  org.eclipse.equinox.common;bundle-version="3.6.200"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/code/org.eclipse.fx.text/pom.xml b/bundles/code/org.eclipse.fx.text/pom.xml
index 9201687..6b2fdae 100644
--- a/bundles/code/org.eclipse.fx.text/pom.xml
+++ b/bundles/code/org.eclipse.fx.text/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/javax.annotation.jre/pom.xml b/bundles/runtime/javax.annotation.jre/pom.xml
index 2697787..f83c057 100755
--- a/bundles/runtime/javax.annotation.jre/pom.xml
+++ b/bundles/runtime/javax.annotation.jre/pom.xml
@@ -11,7 +11,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/javax.xml.jre/pom.xml b/bundles/runtime/javax.xml.jre/pom.xml
index 414a5c2..e22383b 100755
--- a/bundles/runtime/javax.xml.jre/pom.xml
+++ b/bundles/runtime/javax.xml.jre/pom.xml
@@ -11,7 +11,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.databinding.tests/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.databinding.tests/META-INF/MANIFEST.MF
index f110b43..1e7ad59 100644
--- a/bundles/runtime/org.eclipse.fx.core.databinding.tests/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.databinding.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Tests
 Bundle-SymbolicName: org.eclipse.fx.core.databinding.tests
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit;bundle-version="4.11.0",
  org.eclipse.core.databinding;bundle-version="1.4.1",
diff --git a/bundles/runtime/org.eclipse.fx.core.databinding/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core.databinding/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.databinding/META-INF/MANIFEST.MF
index 32b37ba..0f7c28c 100755
--- a/bundles/runtime/org.eclipse.fx.core.databinding/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.databinding/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.core.databinding
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.databinding.observable;bundle-version="1.5.0",
  org.eclipse.core.databinding.property;bundle-version="1.5.0",
  org.eclipse.equinox.common;bundle-version="3.7.0",
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.core.databinding;version="2.6.0"
+Export-Package: org.eclipse.fx.core.databinding;version="3.0.0"
 Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/runtime/org.eclipse.fx.core.databinding/pom.xml b/bundles/runtime/org.eclipse.fx.core.databinding/pom.xml
index 97a4cdd..b5ec44a 100755
--- a/bundles/runtime/org.eclipse.fx.core.databinding/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.databinding/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/.project b/bundles/runtime/org.eclipse.fx.core.di.context.tests/.project
index b0dad9d..8229ca7 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context.tests/.project
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/.project
@@ -20,6 +20,11 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.di.context.tests/META-INF/MANIFEST.MF
index 1111da6..8256c73 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context.tests/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Tests
 Bundle-SymbolicName: org.eclipse.fx.core.di.context.tests
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit;bundle-version="4.11.0",
  org.eclipse.fx.core.di;bundle-version="0.9.0",
@@ -17,5 +17,8 @@
 Import-Package: javax.annotation;version="1.1.0";resolution:=optional,
  javax.inject;version="1.0.0",
  org.eclipse.core.runtime;version="3.5.0",
- org.osgi.framework;version="1.8.0"
+ org.osgi.framework;version="1.8.0",
+ org.osgi.service.component.annotations;version="1.2.0"
 Bundle-ActivationPolicy: lazy
+Service-Component: OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceA.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceB.xml
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceA.xml b/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceA.xml
new file mode 100644
index 0000000..dfeadf5
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceA.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.core.di.context.tests.SampleServiceA">
+   <property name="service.ranking" value="1"/>
+   <service>
+      <provide interface="org.eclipse.fx.core.di.context.tests.TestService"/>
+   </service>
+   <implementation class="org.eclipse.fx.core.di.context.tests.SampleServiceA"/>
+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceB.xml b/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceB.xml
new file mode 100644
index 0000000..719ec14
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceB.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.core.di.context.tests.SampleServiceB">
+   <service>
+      <provide interface="org.eclipse.fx.core.di.context.tests.TestService"/>
+   </service>
+   <implementation class="org.eclipse.fx.core.di.context.tests.SampleServiceB"/>
+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/build.properties b/bundles/runtime/org.eclipse.fx.core.di.context.tests/build.properties
index ff124f5..be35c6d 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context.tests/build.properties
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/build.properties
@@ -1,6 +1,8 @@
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
-               .
+               .,\
+               OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceA.xml,\
+               OSGI-INF/services/org.eclipse.fx.core.di.context.tests.SampleServiceB.xml
 additional.bundles = org.eclipse.jdt.annotation
-jars.extra.classpath = platform:/plugin/org.eclipse.jdt.annotation
\ No newline at end of file
+jars.extra.classpath = platform:/plugin/org.eclipse.jdt.annotation
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ContextTestSuite.java b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ContextTestSuite.java
index 3691d79..bd2a2bb 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ContextTestSuite.java
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ContextTestSuite.java
@@ -5,7 +5,7 @@
 import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
-@SuiteClasses({ContextBoundValueTestCase.class, PreferenceValueTestCase.class})
+@SuiteClasses({ContextBoundValueTestCase.class, PreferenceValueTestCase.class,ServiceSupplierTestCase.class})
 public class ContextTestSuite {
 
 }
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceA.java b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceA.java
new file mode 100644
index 0000000..dc9ba5f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceA.java
@@ -0,0 +1,8 @@
+package org.eclipse.fx.core.di.context.tests;
+
+import org.osgi.service.component.annotations.Component;
+
+@Component(property="service.ranking=1")
+public class SampleServiceA implements TestService {
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceB.java b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceB.java
new file mode 100644
index 0000000..8765341
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/SampleServiceB.java
@@ -0,0 +1,8 @@
+package org.eclipse.fx.core.di.context.tests;
+
+import org.osgi.service.component.annotations.Component;
+
+@Component
+public class SampleServiceB implements TestService {
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ServiceSupplierTestCase.java b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ServiceSupplierTestCase.java
new file mode 100644
index 0000000..e925201
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/ServiceSupplierTestCase.java
@@ -0,0 +1,158 @@
+package org.eclipse.fx.core.di.context.tests;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.fx.core.di.Service;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceRegistration;
+
+public class ServiceSupplierTestCase {
+	public static class TestBean {
+		TestService service;
+		List<TestService> serviceList;
+		int serviceInjectionCount;
+		int serviceListInjectionCount;
+
+		@Inject
+		public void setService(@Service TestService service) {
+			this.service = service;
+			this.serviceInjectionCount++;
+		}
+
+		@Inject
+		public void setServiceList(@Service List<TestService> serviceList) {
+			this.serviceList = serviceList;
+			this.serviceListInjectionCount++;
+		}
+	}
+
+	private List<ServiceRegistration<?>> registrations = new ArrayList<>();
+
+	@After
+	public void cleanup() {
+		this.registrations.forEach( r -> r.unregister());
+	}
+
+	@Test
+	public void testInitialInject() {
+		IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext());
+		TestBean bean = ContextInjectionFactory.make(TestBean.class, serviceContext);
+		Assert.assertNotNull(bean.service);
+		Assert.assertNotNull(bean.serviceList);
+		Assert.assertSame(SampleServiceA.class,bean.service.getClass());
+		Assert.assertEquals(1, bean.serviceInjectionCount);
+
+		Assert.assertEquals(2, bean.serviceList.size());
+		Assert.assertEquals(1, bean.serviceListInjectionCount);
+		Assert.assertSame(SampleServiceA.class,bean.serviceList.get(0).getClass());
+		Assert.assertSame(SampleServiceB.class,bean.serviceList.get(1).getClass());
+
+	}
+
+	@Test
+	public void testDynamicAdd() {
+		BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(context);
+		TestBean bean = ContextInjectionFactory.make(TestBean.class, serviceContext);
+
+		Assert.assertEquals(1, bean.serviceInjectionCount);
+		Assert.assertEquals(1, bean.serviceListInjectionCount);
+
+		TestService t = new TestService() {
+			// nothing todo
+		};
+
+		Hashtable<String, Object> properties = new Hashtable<>();
+		properties.put("service.ranking", 2); //$NON-NLS-1$
+		this.registrations.add(context.registerService(TestService.class, t, properties));
+
+		Assert.assertSame(t,bean.service);
+		Assert.assertEquals(2, bean.serviceInjectionCount);
+
+		Assert.assertEquals(2, bean.serviceListInjectionCount);
+		Assert.assertEquals(3, bean.serviceList.size());
+		Assert.assertSame(t,bean.serviceList.get(0));
+
+		TestService t2 = new TestService() {
+			// nothing todo
+		};
+
+		properties = new Hashtable<>();
+		properties.put("service.ranking", Integer.valueOf(-1)); //$NON-NLS-1$
+		this.registrations.add(context.registerService(TestService.class, t2, properties));
+
+		Assert.assertSame(t,bean.service);
+		Assert.assertEquals(3, bean.serviceInjectionCount);
+
+		Assert.assertEquals(3, bean.serviceListInjectionCount);
+
+		Assert.assertEquals(4, bean.serviceList.size());
+		Assert.assertSame(t,bean.serviceList.get(0));
+	}
+
+	@Test
+	public void testDynamicAddRemove() {
+		BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(context);
+		TestBean bean = ContextInjectionFactory.make(TestBean.class, serviceContext);
+
+		Assert.assertEquals(1, bean.serviceInjectionCount);
+		Assert.assertEquals(1, bean.serviceListInjectionCount);
+
+		TestService t = new TestService() {
+			// nothing todo
+		};
+
+		Hashtable<String, Object> properties = new Hashtable<>();
+		properties.put("service.ranking", 2); //$NON-NLS-1$
+		this.registrations.add(context.registerService(TestService.class, t, properties));
+
+		Assert.assertSame(t,bean.service);
+		Assert.assertEquals(2, bean.serviceInjectionCount);
+
+		Assert.assertEquals(2, bean.serviceListInjectionCount);
+		Assert.assertEquals(3, bean.serviceList.size());
+		Assert.assertSame(t,bean.serviceList.get(0));
+
+		ServiceRegistration<?> registration = this.registrations.get(0);
+		registration.unregister();
+		this.registrations.remove(registration);
+
+		Assert.assertEquals(3, bean.serviceInjectionCount);
+		Assert.assertEquals(3, bean.serviceListInjectionCount);
+
+		Assert.assertSame(SampleServiceA.class,bean.service.getClass());
+		Assert.assertEquals(2, bean.serviceList.size());
+		Assert.assertSame(SampleServiceA.class,bean.serviceList.get(0).getClass());
+		Assert.assertSame(SampleServiceB.class,bean.serviceList.get(1).getClass());
+	}
+
+	@Test
+	public void testCleanup() {
+		BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		IEclipseContext iec = EclipseContextFactory.getServiceContext(context).createChild();
+		TestBean bean = ContextInjectionFactory.make(TestBean.class, iec);
+		iec.dispose();
+
+		TestService t = new TestService() {
+			// nothing todo
+		};
+
+		Hashtable<String, Object> properties = new Hashtable<>();
+		properties.put("service.ranking", 2); //$NON-NLS-1$
+		this.registrations.add(context.registerService(TestService.class, t, properties));
+
+		Assert.assertSame(SampleServiceA.class,bean.service.getClass());
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/TestService.java b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/TestService.java
new file mode 100644
index 0000000..96f34a6
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context.tests/src/org/eclipse/fx/core/di/context/tests/TestService.java
@@ -0,0 +1,5 @@
+package org.eclipse.fx.core.di.context.tests;
+
+public interface TestService {
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core.di.context/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di.context/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core.di.context/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.di.context/META-INF/MANIFEST.MF
index ac30b38..10a7365 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.di.context/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Context
 Bundle-SymbolicName: org.eclipse.fx.core.di.context
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.3.0",
@@ -14,14 +14,32 @@
  org.eclipse.equinox.preferences;bundle-version="3.5.300"
 Import-Package: javax.annotation;version="1.1.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.adapter;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.event;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.core.preferences;version="2.6.0",
- org.eclipse.fx.core.text;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.adapter;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.event;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.core.preferences;version="3.0.0",
+ org.eclipse.fx.core.text;version="3.0.0",
  org.osgi.framework;version="1.8.0"
-Service-Component: OSGI-INF/services/*
-Export-Package: org.eclipse.fx.core.di.context;version="2.6.0"
+Export-Package: org.eclipse.fx.core.di.context;version="3.0.0"
 Bundle-Vendor: Eclipse.org
+Service-Component: OSGI-INF/services/org.eclipse.fx.core.di.context.internal.LocaleProviderFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ConsumerAdapterProvider_Value.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.AdaptValueSupplier.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ObservableAdapterProvider_Value.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ObservableAdapterProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.PropertyAdapterProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.EventSystemContextFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ScopedObjectFactoryFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.FXMLLoaderTypeProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.PreferenceValueSupplier.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ConsumerAdapterProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ServiceSupplier.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.LoggerSupplier.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.PropertyAdapterProvider_Value.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.NumberFormatterFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.DateFormatterFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.ContextBoundValueSupplier.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.TemportalAccessorFormatterFunction.xml,
+ OSGI-INF/services/org.eclipse.fx.core.di.context.internal.LocalInstanceObjectSupplier.xml
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context/pom.xml b/bundles/runtime/org.eclipse.fx.core.di.context/pom.xml
index 8f238f0..5bfca9b 100755
--- a/bundles/runtime/org.eclipse.fx.core.di.context/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.di.context/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.di.context/src/org/eclipse/fx/core/di/context/internal/ServiceSupplier.java b/bundles/runtime/org.eclipse.fx.core.di.context/src/org/eclipse/fx/core/di/context/internal/ServiceSupplier.java
index ffcf5af..5f6d876 100644
--- a/bundles/runtime/org.eclipse.fx.core.di.context/src/org/eclipse/fx/core/di/context/internal/ServiceSupplier.java
+++ b/bundles/runtime/org.eclipse.fx.core.di.context/src/org/eclipse/fx/core/di/context/internal/ServiceSupplier.java
@@ -14,19 +14,18 @@
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Predicate;
 
-import javax.inject.Named;
-
-import org.eclipse.e4.core.contexts.IContextFunction;
 import org.eclipse.e4.core.di.IInjector;
 import org.eclipse.e4.core.di.suppliers.ExtendedObjectSupplier;
 import org.eclipse.e4.core.di.suppliers.IObjectDescriptor;
 import org.eclipse.e4.core.di.suppliers.IRequestor;
-import org.eclipse.e4.core.internal.contexts.ContextObjectSupplier;
-import org.eclipse.e4.core.internal.di.Requestor;
 import org.eclipse.fx.core.di.Service;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -48,36 +47,57 @@
 public class ServiceSupplier extends ExtendedObjectSupplier {
 
 	static class ServiceHandler implements ServiceListener {
-		private final IRequestor requestor;
+		private final ServiceSupplier supplier;
+		final Set<IRequestor> requestors = new HashSet<>();
 		private final BundleContext bundleContext;
-		private final Class<?> type;
+		private final Class<?> serviceType;
 
-		public ServiceHandler(IRequestor requestor, BundleContext bundleContext, Class<?> type) {
-			this.requestor = requestor;
+		public ServiceHandler(ServiceSupplier supplier, BundleContext bundleContext, Class<?> serviceType) {
+			this.supplier = supplier;
 			this.bundleContext = bundleContext;
-			this.type = type;
+			this.serviceType = serviceType;
 		}
 
 		@Override
 		public void serviceChanged(ServiceEvent event) {
-			if (!this.requestor.isValid()) {
-				this.bundleContext.removeServiceListener(this);
-				return;
-			}
+			synchronized (this.supplier) {
+				Predicate<IRequestor> pr = IRequestor::isValid;
+				this.requestors.removeIf(pr.negate());
 
-			String[] data = (String[]) event.getServiceReference().getProperty(Constants.OBJECTCLASS);
-			for (String d : data) {
-				if (this.type.getName().equals(d)) {
-					this.requestor.resolveArguments(false);
-					break;
-				} else if( d.equals(IContextFunction.SERVICE_NAME) && this.type.getName().equals(event.getServiceReference().getProperty(IContextFunction.SERVICE_CONTEXT_KEY)) ) {
-					this.requestor.resolveArguments(false);
-					break;
+				if( this.requestors.isEmpty() ) {
+					Map<Class<?>, ServiceHandler> map = this.supplier.handlerList.get(this.bundleContext);
+					if( map != null ) {
+						map.remove(this.serviceType);
+
+						if( map.isEmpty() ) {
+							this.supplier.handlerList.remove(this.bundleContext);
+						}
+					}
+
+					this.bundleContext.removeServiceListener(this);
+					return;
+				}
+
+				String[] data = (String[]) event.getServiceReference().getProperty(Constants.OBJECTCLASS);
+				for (String d : data) {
+					if (this.serviceType.getName().equals(d)) {
+						this.requestors.forEach( r -> {
+							try {
+								r.resolveArguments(false);
+								r.execute();
+							} catch(Throwable t) {
+								t.printStackTrace();
+							}
+						});
+						break;
+					}
 				}
 			}
 		}
 	}
 
+	Map<BundleContext,Map<Class<?>,ServiceHandler>> handlerList = new HashMap<>();
+
 	@Override
 	public Object get(IObjectDescriptor descriptor, IRequestor requestor, boolean track, boolean group) {
 		Type desiredType = descriptor.getDesiredType();
@@ -109,27 +129,26 @@
 					Arrays.sort(serviceReferences);
 
 					if( serviceReferences.length > 0 ) {
-						return context.getService(serviceReferences[0]);
+						if( track ) {
+							trackService(context, cl, requestor);
+						}
+						return context.getService(serviceReferences[serviceReferences.length-1]);
 					}
 				}
 			}
-
-			Requestor<?> rr = (Requestor<?>) requestor;
-			ContextObjectSupplier cp = (ContextObjectSupplier) rr.getPrimarySupplier();
-
-			Collection<ServiceReference<IContextFunction>> serviceReferences = context.getServiceReferences(IContextFunction.class, null);
-			List<ServiceReference<IContextFunction>> l = new ArrayList<>(serviceReferences);
-			Collections.sort(l);
-			for( ServiceReference<IContextFunction> r : l ) {
-				if( cl.getName().equals(r.getProperty(SERVICE_CONTEXT_KEY)) ) {
-					Named qualifier = descriptor.getQualifier(Named.class);
-					return context.getService(r).compute(cp.getContext(), qualifier == null ? cl.getName() : qualifier.value());
-				}
-			}
-
-			if( track ) {
-				context.addServiceListener(new ServiceHandler(requestor, context, cl));
-			}
+//FIXME This code looks strange
+//			Requestor<?> rr = (Requestor<?>) requestor;
+//			ContextObjectSupplier cp = (ContextObjectSupplier) rr.getPrimarySupplier();
+//
+//			Collection<ServiceReference<IContextFunction>> serviceReferences = context.getServiceReferences(IContextFunction.class, null);
+//			List<ServiceReference<IContextFunction>> l = new ArrayList<>(serviceReferences);
+//			Collections.sort(l);
+//			for( ServiceReference<IContextFunction> r : l ) {
+//				if( cl.getName().equals(r.getProperty(SERVICE_CONTEXT_KEY)) ) {
+//					Named qualifier = descriptor.getQualifier(Named.class);
+//					return context.getService(r).compute(cp.getContext(), qualifier == null ? cl.getName() : qualifier.value());
+//				}
+//			}
 		} catch (InvalidSyntaxException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -155,11 +174,15 @@
 
 				for (ServiceReference<?> serviceReference : serviceReferences) {
 					rv.add(context.getService(serviceReference));
-					if( track ) {
-						context.addServiceListener(new ServiceHandler(requestor, context, cl));
-					}
 				}
 			}
+
+			// We are in the wrong order
+			Collections.reverse(rv);
+
+			if( track ) {
+				trackService(context, cl, requestor);
+			}
 		} catch (InvalidSyntaxException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -167,4 +190,14 @@
 
 		return rv;
 	}
+
+	private synchronized void trackService(BundleContext context, Class<?> serviceClass, IRequestor requestor) {
+		Map<Class<?>, ServiceHandler> map = this.handlerList.computeIfAbsent(context, (k) -> new HashMap<>());
+		ServiceHandler handler = map.computeIfAbsent(serviceClass, (cl) -> {
+			ServiceHandler h = new ServiceHandler(this,context, serviceClass);
+			context.addServiceListener(h);
+			return h;
+		});
+		handler.requestors.add(requestor);
+	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.core.di/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core.di/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.di/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core.di/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.di/META-INF/MANIFEST.MF
index 6ee8fc6..bd25520 100644
--- a/bundles/runtime/org.eclipse.fx.core.di/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.di/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Di
 Bundle-SymbolicName: org.eclipse.fx.core.di
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Import-Package: javax.annotation;version="1.2.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.adapter;version="2.6.0"
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.adapter;version="3.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.core.di;version="2.6.0"
+Export-Package: org.eclipse.fx.core.di;version="3.0.0"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.core.di/pom.xml b/bundles/runtime/org.eclipse.fx.core.di/pom.xml
index 43e6853..0b8c31b 100755
--- a/bundles/runtime/org.eclipse.fx.core.di/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.di/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.fxml/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core.fxml/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.fxml/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core.fxml/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.fxml/META-INF/MANIFEST.MF
index cef7b30..b46fd8c 100644
--- a/bundles/runtime/org.eclipse.fx.core.fxml/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.fxml/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fxml
 Bundle-SymbolicName: org.eclipse.fx.core.fxml
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="2.0.0";resolution:=optional
-Export-Package: org.eclipse.fx.core.fxml;version="2.6.0"
+Export-Package: org.eclipse.fx.core.fxml;version="3.0.0"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.core.fxml/pom.xml b/bundles/runtime/org.eclipse.fx.core.fxml/pom.xml
index 1804751..8d8fd7a 100755
--- a/bundles/runtime/org.eclipse.fx.core.fxml/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.fxml/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.guice/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.guice/META-INF/MANIFEST.MF
index da3e4fb..a41fec9 100755
--- a/bundles/runtime/org.eclipse.fx.core.guice/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.guice/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.core.guice
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: com.google.inject;version="[1.3.0,2.0.0)",
  com.google.inject.spi;version="[1.3.0,2.0.0)",
  javax.inject;version="1.0.0",
- org.eclipse.fx.core.log;version="2.6.0",
+ org.eclipse.fx.core.log;version="3.0.0",
  org.osgi.framework;version="1.8.0"
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.fx.core.guice;version="2.6.0"
+Export-Package: org.eclipse.fx.core.guice;version="3.0.0"
diff --git a/bundles/runtime/org.eclipse.fx.core.guice/pom.xml b/bundles/runtime/org.eclipse.fx.core.guice/pom.xml
index 40d41ec..ae8595e 100755
--- a/bundles/runtime/org.eclipse.fx.core.guice/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.guice/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.log4j/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.log4j/META-INF/MANIFEST.MF
index b1d583f..1ca912d 100755
--- a/bundles/runtime/org.eclipse.fx.core.log4j/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.log4j/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-SymbolicName: org.eclipse.fx.core.log4j

-Bundle-Version: 2.6.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional

 Service-Component: OSGI-INF/services/org.eclipse.fx.core.log4j.Log4JLoggerFactory.xml

 Import-Package: javax.inject;version="1.0.0",

  org.apache.log4j;version="1.2.15",

- org.eclipse.fx.core;version="2.6.0",

- org.eclipse.fx.core.log;version="2.6.0",

+ org.eclipse.fx.core;version="3.0.0",

+ org.eclipse.fx.core.log;version="3.0.0",

  org.osgi.service.component.annotations;version="1.2.0"

 Bundle-Vendor: %Bundle-Vendor

diff --git a/bundles/runtime/org.eclipse.fx.core.log4j/pom.xml b/bundles/runtime/org.eclipse.fx.core.log4j/pom.xml
index 8b194da..f64961b 100755
--- a/bundles/runtime/org.eclipse.fx.core.log4j/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.log4j/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.p2/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.p2/META-INF/MANIFEST.MF
index b1db04d..ec9ce24 100755
--- a/bundles/runtime/org.eclipse.fx.core.p2/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.p2/META-INF/MANIFEST.MF
@@ -2,15 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: P2
 Bundle-SymbolicName: org.eclipse.fx.core.p2
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.equinox.p2.core;version="2.0.0",
  org.eclipse.equinox.p2.operations;version="2.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.core.operation;version="2.6.0",
- org.eclipse.fx.core.update;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.core.operation;version="3.0.0",
+ org.eclipse.fx.core.update;version="3.0.0",
  org.osgi.framework;version="1.3.0",
  org.osgi.service.component.annotations;version="1.2.0"
 Require-Bundle: org.eclipse.core.jobs,
diff --git a/bundles/runtime/org.eclipse.fx.core.p2/pom.xml b/bundles/runtime/org.eclipse.fx.core.p2/pom.xml
index 3fa7c59..538665b 100755
--- a/bundles/runtime/org.eclipse.fx.core.p2/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.p2/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.slf4j/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core.slf4j/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.slf4j/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core.slf4j/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.slf4j/META-INF/MANIFEST.MF
index 12b4a6b..e0e5151 100644
--- a/bundles/runtime/org.eclipse.fx.core.slf4j/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core.slf4j/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-SymbolicName: org.eclipse.fx.core.slf4j

-Bundle-Version: 2.6.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional

 Service-Component: OSGI-INF/slf4jlogger.xml

 Import-Package: javax.inject;version="1.0.0",

- org.eclipse.fx.core;version="2.6.0",

- org.eclipse.fx.core.log;version="2.6.0",

+ org.eclipse.fx.core;version="3.0.0",

+ org.eclipse.fx.core.log;version="3.0.0",

  org.slf4j;version="1.7.2"

 Bundle-Vendor: %Bundle-Vendor

diff --git a/bundles/runtime/org.eclipse.fx.core.slf4j/pom.xml b/bundles/runtime/org.eclipse.fx.core.slf4j/pom.xml
index 49d824b..25b0217 100755
--- a/bundles/runtime/org.eclipse.fx.core.slf4j/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core.slf4j/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/.classpath b/bundles/runtime/org.eclipse.fx.core.tests/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/.gitignore b/bundles/runtime/org.eclipse.fx.core.tests/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/.project b/bundles/runtime/org.eclipse.fx.core.tests/.project
new file mode 100644
index 0000000..7f00feb
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.fx.core.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/.settings/org.eclipse.jdt.core.prefs b/bundles/runtime/org.eclipse.fx.core.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cd33f2c
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests
+Bundle-SymbolicName: org.eclipse.fx.core.tests
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.fx.core.bindings,
+ org.eclipse.fx.core.property
+Require-Bundle: org.junit;bundle-version="4.12.0",
+ org.eclipse.fx.core
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/build.properties b/bundles/runtime/org.eclipse.fx.core.tests/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/bundles/runtime/org.eclipse.fx.core.tests/src/org/eclipse/fx/core/property/FXBindingsTest.java b/bundles/runtime/org.eclipse.fx.core.tests/src/org/eclipse/fx/core/property/FXBindingsTest.java
new file mode 100644
index 0000000..6e32a4f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core.tests/src/org/eclipse/fx/core/property/FXBindingsTest.java
@@ -0,0 +1,751 @@
+package org.eclipse.fx.core.property;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.core.Status.State;
+import org.eclipse.fx.core.bindings.FXBindings;
+import org.eclipse.fx.core.bindings.FXBindings.StatusBinding;
+import org.eclipse.fx.core.bindings.FXCollectors;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javafx.beans.binding.ListBinding;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ListChangeListener.Change;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.SortedList;
+
+public class FXBindingsTest {
+
+	public static class Inner {
+		public final StringProperty Value;
+
+		public Inner(String blub) {
+			this.Value = new SimpleStringProperty(blub);
+		}
+	}
+
+	public static class Outer {
+		public ObjectProperty<Inner> Value = new SimpleObjectProperty<>();
+	}
+
+	public static class Person {
+		private static int i;
+		private final StringProperty name;
+		private ObjectProperty<Address> address = new SimpleObjectProperty<>();
+
+		public Person() {
+			this.name = new SimpleStringProperty(this, "name", i++ + "");
+		}
+
+		public Person(String name) {
+			this.name = new SimpleStringProperty(this, "name", name);
+		}
+	}
+
+	public static class Address {
+		private StringProperty street = new SimpleStringProperty();
+	}
+
+	@Test
+	public void testBindStream() {
+		Outer outer = new Outer();
+		Inner inner = new Inner("Hello");
+		outer.Value.set(inner);
+
+		ObjectProperty<Outer> master = new SimpleObjectProperty<Outer>(outer);
+
+		ObjectBinding<String> m2 = FXBindings.bindStream(master).map(o -> o.Value).map(i -> i.Value).toBinding();
+
+		Assert.assertEquals("Hello", m2.get());
+
+		inner.Value.set("test1");
+
+		Assert.assertEquals("test1", m2.get());
+
+		Inner inner2 = new Inner("test2");
+		outer.Value.set(inner2);
+
+		Assert.assertEquals("test2", m2.get());
+
+		Outer outer2 = new Outer();
+		Inner inner3 = new Inner("test3");
+		outer2.Value.set(inner3);
+		master.set(outer2);
+
+		Assert.assertEquals("test3", m2.get());
+
+		ObjectProperty<Person> p = new SimpleObjectProperty<>( new Person() );
+
+		ObjectBinding<String> street = FXBindings.bindStream( p ).map( o -> o.address).map( o -> o.street).toBinding();
+		Property<String> streetProperty = FXBindings.bindStream( p ).map( o -> o.address).collect(FXCollectors.toProperty(o -> o.street));
+
+		Assert.assertNull(street.get());
+		Address a = new Address();
+		p.get().address.set(a);
+		Assert.assertNull(street.get());
+		p.get().address.get().street.set("Test");
+		Assert.assertEquals("Test",street.get());
+		Assert.assertEquals("Test",streetProperty.getValue());
+		streetProperty.setValue("Super geil 1");
+		Assert.assertEquals("Super geil 1",street.get());
+
+		Address a2 = new Address();
+		a2.street.set("Bla");
+		p.get().address.set(a2);
+		Assert.assertEquals("Bla",street.get());
+
+		streetProperty.setValue("Super geil 2");
+		Assert.assertEquals("Super geil 2",street.get());
+
+		Assert.assertEquals(a.street.get(), "Super geil 1");
+		Assert.assertEquals(a2.street.get(), "Super geil 2");
+
+
+		StringProperty uiProp = new SimpleStringProperty();
+		uiProp.bindBidirectional(streetProperty);
+		Assert.assertEquals("Super geil 2", uiProp.get());
+		streetProperty.setValue("ui value");
+		Assert.assertEquals("ui value", uiProp.get());
+		uiProp.set("back to model");
+		Assert.assertEquals("back to model", a2.street.get());
+	}
+
+	@Test
+	public void testCollectors() {
+		Outer outer = new Outer();
+		Inner inner = new Inner("Hello");
+		outer.Value.set(inner);
+
+		ObjectProperty<Outer> master = new SimpleObjectProperty<Outer>(outer);
+
+		ObjectBinding<String> m2 = FXBindings.bindStream(master).map(o -> o.Value).map(i -> i.Value).collect(FXCollectors.toBinding());
+
+		Assert.assertEquals(m2.get(), "Hello");
+		master.set(null);
+		Assert.assertNull(m2.get());
+
+		master.set(outer);
+		m2 = FXBindings.bindStream(master).map(o -> o.Value).map(i -> i.Value).collect(FXCollectors.toBinding("No Null"));
+		Assert.assertEquals(m2.get(), "Hello");
+		master.set(null);
+		Assert.assertEquals(m2.get(),"No Null");
+	}
+
+	@Test
+	public void testGC() {
+		ObjectProperty<Person> p = new SimpleObjectProperty<>( new Person() );
+
+		ObjectBinding<String> street = FXBindings.bindStream( p ).map( o -> o.address).map( o -> o.street).toBinding();
+		Property<String> streetProperty = FXBindings.bindStream( p ).map( o -> o.address).collect(FXCollectors.toProperty(o -> o.street));
+
+		System.gc();
+
+		Assert.assertNull(street.get());
+		Address a = new Address();
+		p.get().address.set(a);
+		Assert.assertNull(street.get());
+		p.get().address.get().street.set("Test");
+		Assert.assertEquals("Test",street.get());
+		Assert.assertEquals("Test",streetProperty.getValue());
+		streetProperty.setValue("Super geil 1");
+		Assert.assertEquals("Super geil 1",street.get());
+	}
+
+	@Test
+	public void testNullRoot() {
+		ObjectProperty<Person> p = new SimpleObjectProperty<>( new Person() );
+		p.get().address.set(new Address());
+		p.get().address.get().street.set("Street");
+		Property<String> streetProperty = FXBindings.bindStream( p ).map( o -> o.address).collect(FXCollectors.toProperty(o -> o.street));
+		p.set(null);
+		Assert.assertNull(streetProperty.getValue());
+
+		Person p2 = new Person();
+		Address a2 = new Address();
+		a2.street.set("New Street");
+		p2.address.set(a2);
+		p.set(p2);
+		Assert.assertNotNull(streetProperty.getValue());
+
+		p2.address.set(null);
+		Assert.assertNull(streetProperty.getValue());
+
+		Address a3 = new Address();
+		a3.street.set("New New Street");
+		p2.address.set(a3);
+		Assert.assertNotNull(streetProperty.getValue());
+	}
+
+	@Test
+	public void testHop0() {
+		ObjectProperty<Person> currentPerson = new SimpleObjectProperty<>();
+
+		ObjectBinding<Person> binding = FXBindings.bindStream(currentPerson).toBinding();
+		Assert.assertNull(binding.get());
+		Person p1 = new Person();
+		currentPerson.set(p1);
+		Assert.assertSame(p1,binding.get());
+
+		Person p2 = new Person();
+		currentPerson.set(p2);
+		Assert.assertSame(p2,binding.get());
+	}
+
+	@Test
+	public void testListenerInit() {
+		ObjectProperty<Person> currentPerson = new SimpleObjectProperty<>();
+
+		ObjectBinding<Person> binding = FXBindings.bindStream(currentPerson).toBinding();
+		AtomicInteger i = new AtomicInteger();
+		binding.addListener( o -> {
+			i.incrementAndGet();
+		});
+
+		Assert.assertEquals(0, i.get());
+		Person p1 = new Person();
+		currentPerson.set(p1);
+		Assert.assertEquals(1, i.get());
+	}
+
+	@Test
+	public void testListenerInitComplex() {
+		ObjectProperty<Person> currentPerson = new SimpleObjectProperty<>();
+
+		ObjectBinding<Address> binding = FXBindings.bindStream(currentPerson).map( p -> p.address).toBinding();
+		AtomicInteger i = new AtomicInteger();
+		binding.addListener( o -> {
+			i.incrementAndGet();
+		});
+
+		Assert.assertEquals(0, i.get());
+		Person p1 = new Person();
+		currentPerson.set(p1);
+		Assert.assertEquals(1, i.get());
+	}
+
+	@Test
+	public void testMap() {
+		ObjectProperty<String> master = new SimpleObjectProperty<String>("Test");
+
+		ObjectBinding<String> map = FXBindings.map(master, x -> "Hallo " + x);
+
+		Assert.assertEquals("Hallo Test", map.get());
+
+		master.set("Foo");
+
+		Assert.assertEquals("Hallo Foo", map.get());
+	}
+
+	@Test
+	public void testFlatMap() {
+		Outer outer = new Outer();
+		Inner inner = new Inner("Hello");
+		outer.Value.set(inner);
+
+		ObjectProperty<Outer> master = new SimpleObjectProperty<Outer>(outer);
+
+		ObjectBinding<Inner> m1 = FXBindings.flatMap(master, o -> o.Value);
+		ObjectBinding<String> m2 = FXBindings.flatMap(m1, i -> i.Value);
+
+
+		Assert.assertEquals("Hello", m2.get());
+
+		inner.Value.set("test1");
+
+		Assert.assertEquals("test1", m2.get());
+
+		Inner inner2 = new Inner("test2");
+		outer.Value.set(inner2);
+
+		Assert.assertEquals("test2", m2.get());
+
+		Outer outer2 = new Outer();
+		Inner inner3 = new Inner("test3");
+		outer2.Value.set(inner3);
+		master.set(outer2);
+
+		Assert.assertEquals("test3", m2.get());
+
+	}
+
+	private static interface ChangeTest<T> {
+		void test(Change<? extends T> change);
+	}
+	private static class RemoveAdd<T> implements ChangeTest<T> {
+		private T[] added;
+		private T[] removed;
+		private int from;
+
+		public RemoveAdd(T[] removed, T[] added, int from) {
+			this.added = added;
+			this.removed = removed;
+			this.from = from;
+		}
+
+		@Override
+		public void test(Change<? extends T> change) {
+			Assert.assertEquals(added.length > 0, change.wasAdded());
+			Assert.assertEquals(removed.length > 0, change.wasRemoved());
+			Assert.assertEquals(from, change.getFrom());
+			Assert.assertArrayEquals(added, change.getAddedSubList().toArray());
+			Assert.assertArrayEquals(removed, change.getRemoved().toArray());
+		}
+
+	}
+
+	private <T> void assertChange(List<Change<? extends T>> actual, ChangeTest<T>... expected) {
+		Assert.assertEquals(expected.length, actual.size());
+		int idx = 0;
+		for (Change<? extends T> c : actual) {
+			c.reset();
+			c.next();
+			expected[idx].test(c);
+			idx++;
+		}
+		actual.clear();
+	}
+
+	@Test
+	public void testConcat() {
+
+		ObservableList<String> l0 = FXCollections.observableArrayList();
+		ObservableList<String> l1 = FXCollections.observableArrayList();
+		ObservableList<String> l2 = FXCollections.observableArrayList();
+
+		ListBinding<String> concat = FXBindings.concat(l0, l1, l2);
+
+		List<Change<? extends String>> curChange = new ArrayList<>();
+		ListChangeListener<String> l = c -> {
+			curChange.add(c);
+			c.next();
+			System.err.println("Removed: " + c.getRemoved());
+			System.err.println("Added: " + c.getAddedSubList());
+		};
+		concat.addListener(l);
+
+
+		Assert.assertEquals(0, concat.size());
+
+		l1.add("Hello");
+
+		Assert.assertArrayEquals(new String[] {
+				"Hello"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] {}, new String[] { "Hello" }, 0));
+
+
+		l2.add("World");
+
+		Assert.assertArrayEquals(new String[] {
+				"Hello",
+				"World"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] {}, new String[] { "World" }, 1));
+
+		l0.add("yay");
+
+		Assert.assertArrayEquals(new String[] {
+				"yay",
+				"Hello",
+				"World"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] {}, new String[] { "yay" }, 0));
+
+		l0.add("!!!");
+
+		System.gc();
+
+		Assert.assertArrayEquals(new String[] {
+				"yay",
+				"!!!",
+				"Hello",
+				"World"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] {}, new String[] { "!!!" }, 1));
+
+		l0.remove("!!!");
+
+		Assert.assertArrayEquals(new String[] {
+				"yay",
+				"Hello",
+				"World"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "!!!" }, new String[] { }, 1));
+
+		l0.remove("yay");
+
+		Assert.assertArrayEquals(new String[] {
+				"Hello",
+				"World"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "yay" }, new String[] { }, 0));
+
+		l2.remove("World");
+
+		Assert.assertArrayEquals(new String[] {
+				"Hello"
+		}, concat.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "World" }, new String[] { }, 1));
+
+		l1.remove("Hello");
+
+		Assert.assertEquals(0, concat.size());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "Hello" }, new String[] { }, 0));
+	}
+
+	@Test
+	public void testConcatChangeEvents() {
+		ObservableList<String> l0 = FXCollections.observableArrayList("A","B","C");
+		ObservableList<String> l1 = FXCollections.observableArrayList("E","F","G");
+		ObservableList<String> l2 = FXCollections.observableArrayList("I","J","K");
+
+		ObservableList<String> concat = FXBindings.concatenatedList(l0, l1, l2);
+
+		AtomicInteger totalEventCount = new AtomicInteger();
+		AtomicInteger changeCount = new AtomicInteger();
+		AtomicBoolean addCount = new AtomicBoolean();
+		AtomicBoolean removeCount = new AtomicBoolean();
+
+		concat.addListener( (Change<? extends String> c) -> {
+			totalEventCount.incrementAndGet();
+			changeCount.set(0);
+			while( c.next() ) {
+				changeCount.incrementAndGet();
+				addCount.set(c.wasAdded());
+				removeCount.set(c.wasRemoved());
+			}
+		});
+
+		l0.add(3, "D");
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertTrue(addCount.get());
+		Assert.assertFalse(removeCount.get());
+
+		l0.remove("D");
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertFalse(addCount.get());
+		Assert.assertTrue(removeCount.get());
+
+		l0.addAll(3, Arrays.asList("D", "D2"));
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertTrue(addCount.get());
+		Assert.assertFalse(removeCount.get());
+
+		l0.removeAll("D","D2");
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertFalse(addCount.get());
+		Assert.assertTrue(removeCount.get());
+
+		l1.add(3,"H");
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertTrue(addCount.get());
+		Assert.assertFalse(removeCount.get());
+
+		l1.remove("H");
+		Assert.assertEquals(1, changeCount.get());
+		Assert.assertFalse(addCount.get());
+		Assert.assertTrue(removeCount.get());
+
+		totalEventCount.set(0);
+		l0.setAll("C","B","A");
+		Assert.assertEquals(2, totalEventCount.get()); // TODO Not ideal but currently no better solution
+
+//		ObservableList<String> list = FXCollections.observableArrayList("A","B","C");
+//		list.addListener( (Change<? extends String> c) -> {
+//			while( c.next() ) {
+//				System.err.println(c.getAddedSubList());
+//				System.err.println(c.getRemoved());
+//			}
+//		} );
+//		list.setAll("B","A","C");
+	}
+
+	@Test
+	public void testMapList() {
+		ObservableList<String> source = FXCollections.observableArrayList("one", "two", "three");
+
+		ListBinding<String> result = FXBindings.mapList(source, s -> s + " apples");
+
+		Assert.assertArrayEquals(new String[] {
+				"one apples",
+				"two apples",
+				"three apples"
+		}, result.toArray());
+
+		source.set(1, "99");
+
+		Assert.assertArrayEquals(new String[] {
+				"one apples",
+				"99 apples",
+				"three apples"
+		}, result.toArray());
+
+		source.add("another");
+
+		Assert.assertArrayEquals(new String[] {
+				"one apples",
+				"99 apples",
+				"three apples",
+				"another apples"
+		}, result.toArray());
+
+		source.remove("one");
+
+		Assert.assertArrayEquals(new String[] {
+				"99 apples",
+				"three apples",
+				"another apples"
+		}, result.toArray());
+	}
+
+	@Test
+	public void testFlatMapList() {
+
+		ObservableList<String> one = FXCollections.observableArrayList("1", "2", "3");
+		ObservableList<String> two = FXCollections.observableArrayList();
+		ObservableList<String> three = FXCollections.observableArrayList("a", "b", "c");
+
+		ObservableList<ObservableList<String>> source = FXCollections.observableArrayList(one, two, three);
+
+		ListBinding<String> flatMap = FXBindings.flatMapList(source, x->x);
+
+		List<Change<? extends String>> curChange = new ArrayList<>();
+		ListChangeListener<String> l = c -> {
+			curChange.add(c);
+			c.next();
+			System.err.println("Removed: " + c.getRemoved());
+			System.err.println("Added: " + c.getAddedSubList());
+		};
+		flatMap.addListener(l);
+
+		Assert.assertArrayEquals(new String[] {
+				"1", "2", "3", "a", "b", "c"
+			}, flatMap.toArray());
+
+		two.add("two");
+
+		Assert.assertArrayEquals(new String[] {
+			"1", "2", "3", "two", "a", "b", "c"
+		}, flatMap.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { }, new String[] { "two" }, 3));
+
+
+		one.set(1, "xx");
+
+		Assert.assertArrayEquals(new String[] {
+			"1", "xx", "3", "two", "a", "b", "c"
+		}, flatMap.toArray());
+		System.err.println(curChange);
+		assertChange(curChange,
+				new RemoveAdd<String>(new String[] {"2"}, new String[]{ }, 1),
+				new RemoveAdd<String>(new String[] { }, new String[] { "xx" }, 1));
+
+
+		three.remove(1);
+
+		Assert.assertArrayEquals(new String[] {
+			"1", "xx", "3", "two", "a", "c"
+		}, flatMap.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "b" }, new String[] { }, 5));
+
+		source.remove(one);
+
+		Assert.assertArrayEquals(new String[] {
+			"two", "a", "c"
+		}, flatMap.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { "1", "xx", "3" }, new String[] { }, 0));
+
+		one.add("offline");
+
+		Assert.assertArrayEquals(new String[] {
+			"two", "a", "c"
+		}, flatMap.toArray());
+		Assert.assertEquals(0, curChange.size());
+
+		source.add(one);
+
+		Assert.assertArrayEquals(new String[] {
+			"two", "a", "c", "1", "xx", "3", "offline"
+		}, flatMap.toArray());
+		assertChange(curChange, new RemoveAdd<String>(new String[] { }, new String[] { "1", "xx", "3", "offline"}, 3));
+	}
+
+	@Test
+	public void testFlatMapListValue() {
+
+		StringProperty a = new SimpleStringProperty("a");
+		StringProperty b = new SimpleStringProperty("b");
+		StringProperty c = new SimpleStringProperty("c");
+
+		ObservableList<ObservableValue<String>> source = FXCollections.observableArrayList(a, b, c);
+
+		ListBinding<String> flatMap = FXBindings.flatMapListValue(source, x->x);
+
+
+		Assert.assertArrayEquals(new String[] {
+			"a", "b", "c"
+		}, flatMap.toArray());
+
+		source.remove(b);
+
+		Assert.assertArrayEquals(new String[] {
+			"a", "c"
+		}, flatMap.toArray());
+
+		b.set("B");
+
+		Assert.assertArrayEquals(new String[] {
+			"a", "c"
+		}, flatMap.toArray());
+
+		source.add(b);
+
+		Assert.assertArrayEquals(new String[] {
+			"a", "c", "B"
+		}, flatMap.toArray());
+
+		a.set("A");
+
+		Assert.assertArrayEquals(new String[] {
+			"A", "c", "B"
+		}, flatMap.toArray());
+	}
+
+	@Test
+	public void testBindContent() {
+		List<String> target = new ArrayList<>();
+		ObservableList<Integer> sourceList = FXCollections.observableArrayList(1);
+		FXBindings.bindContent(target, sourceList,  i -> ""+i);
+		sourceList.remove(0);
+	}
+
+	@Test
+	public void testBindingPaddedContent() {
+		List<String> target = new ArrayList<>();
+		ObservableList<Integer> sourceList = FXCollections.observableArrayList(1,2,3);
+		Subscription binding = FXBindings.bindContent(1, target, sourceList, o -> "Converted " + o, i -> "Pad " + i);
+		Assert.assertEquals(4, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 1, target.get(1));
+		Assert.assertEquals("Converted " + 2, target.get(2));
+		Assert.assertEquals("Converted " + 3, target.get(3));
+
+//		binding.setPadding(0);
+//		Assert.assertEquals(3, target.size());
+//		Assert.assertEquals("Converted " + 1, target.get(0));
+//		Assert.assertEquals("Converted " + 2, target.get(1));
+//		Assert.assertEquals("Converted " + 3, target.get(2));
+//
+//		binding.setPadding(1);
+//
+//		Assert.assertEquals(4, target.size());
+//		Assert.assertEquals("Pad " + 0, target.get(0));
+//		Assert.assertEquals("Converted " + 1, target.get(1));
+//		Assert.assertEquals("Converted " + 2, target.get(2));
+//		Assert.assertEquals("Converted " + 3, target.get(3));
+//
+//		binding.setPadding(2);
+//
+//		Assert.assertEquals(5, target.size());
+//		Assert.assertEquals("Pad " + 0, target.get(0));
+//		Assert.assertEquals("Pad " + 1, target.get(1));
+//		Assert.assertEquals("Converted " + 1, target.get(2));
+//		Assert.assertEquals("Converted " + 2, target.get(3));
+//		Assert.assertEquals("Converted " + 3, target.get(4));
+	}
+
+	@Test
+	public void testBindingPaddedContent_AddRemove() {
+		List<String> target = new ArrayList<>();
+		ObservableList<Integer> sourceList = FXCollections.observableArrayList(1,2,3);
+		Subscription binding = FXBindings.bindContent(1, target, sourceList, o -> "Converted " + o, i -> "Pad " + i);
+		Assert.assertEquals(4, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 1, target.get(1));
+		Assert.assertEquals("Converted " + 2, target.get(2));
+		Assert.assertEquals("Converted " + 3, target.get(3));
+
+		sourceList.add(0,0);
+
+		Assert.assertEquals(5, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 0, target.get(1));
+		Assert.assertEquals("Converted " + 1, target.get(2));
+		Assert.assertEquals("Converted " + 2, target.get(3));
+		Assert.assertEquals("Converted " + 3, target.get(4));
+
+		sourceList.remove(0);
+
+		Assert.assertEquals(4, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 1, target.get(1));
+		Assert.assertEquals("Converted " + 2, target.get(2));
+		Assert.assertEquals("Converted " + 3, target.get(3));
+	}
+
+	@Test
+	public void testBindingPaddedContent_Permutate() {
+		List<String> target = new ArrayList<>();
+		SortedList<Integer> sourceList = FXCollections.observableArrayList(1,2,3).sorted((i1, i2) -> {
+			return Integer.compare(i1, i2) * -1;
+		});
+		Subscription binding = FXBindings.bindContent(1, target, sourceList, o -> "Converted " + o, i -> "Pad " + i);
+
+		Assert.assertEquals(4, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 3, target.get(1));
+		Assert.assertEquals("Converted " + 2, target.get(2));
+		Assert.assertEquals("Converted " + 1, target.get(3));
+
+		sourceList.setComparator( ( i1, i2 ) -> Integer.compare(i1, i2) );
+
+		Assert.assertEquals(4, target.size());
+		Assert.assertEquals("Pad " + 0, target.get(0));
+		Assert.assertEquals("Converted " + 1, target.get(1));
+		Assert.assertEquals("Converted " + 2, target.get(2));
+		Assert.assertEquals("Converted " + 3, target.get(3));
+	}
+
+	@Test
+	public void testBindBidirectional() {
+
+		Property<String> s = new SimpleStringProperty("99");
+		Property<Integer> i = new SimpleObjectProperty<Integer>();
+
+		StatusBinding binding = FXBindings.bindBidirectional(i, s, Integer.class, String.class);
+
+		Assert.assertEquals(99, i.getValue().intValue());
+		Assert.assertEquals(State.OK, binding.getValue().getState());
+
+		s.setValue("100");
+		Assert.assertEquals(100, i.getValue().intValue());
+		Assert.assertEquals(State.OK, binding.getValue().getState());
+
+		s.setValue("abcd");
+		Assert.assertEquals(100, i.getValue().intValue());
+		Assert.assertEquals(State.ERROR, binding.getValue().getState());
+
+		s.setValue("101");
+		Assert.assertEquals(101, i.getValue().intValue());
+		Assert.assertEquals(State.OK, binding.getValue().getState());
+
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.core/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.core/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.core/META-INF/MANIFEST.MF
index 9a9f192..13f7598 100755
--- a/bundles/runtime/org.eclipse.fx.core/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.core/META-INF/MANIFEST.MF
@@ -2,24 +2,26 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-SymbolicName: org.eclipse.fx.core

-Bundle-Version: 2.6.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Import-Package: javax.annotation;resolution:=optional,

  javax.inject;version="1.0.0",

  org.apache.commons.lang.text;version="2.6.0",

  org.osgi.framework;version="1.8.0";resolution:=optional,

- org.osgi.service.component.annotations;version="1.2.0";resolution:=optional

-Export-Package: org.eclipse.fx.core;version="2.6.0",

- org.eclipse.fx.core.adapter;version="2.6.0",

- org.eclipse.fx.core.command;version="2.6.0",

- org.eclipse.fx.core.event;version="2.6.0",

- org.eclipse.fx.core.function;version="2.6.0",

- org.eclipse.fx.core.log;version="2.6.0",

- org.eclipse.fx.core.operation;version="2.6.0",

- org.eclipse.fx.core.preferences;version="2.6.0",

- org.eclipse.fx.core.property;version="2.6.0",

- org.eclipse.fx.core.text;version="2.6.0",

- org.eclipse.fx.core.update;version="2.6.0"

+ org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,

+ org.osgi.service.event;version="1.3.1";resolution:=optional

+Export-Package: org.eclipse.fx.core;version="3.0.0",

+ org.eclipse.fx.core.adapter;version="3.0.0",

+ org.eclipse.fx.core.bindings;version="3.0.0",

+ org.eclipse.fx.core.command;version="3.0.0",

+ org.eclipse.fx.core.event;version="3.0.0",

+ org.eclipse.fx.core.function;version="3.0.0",

+ org.eclipse.fx.core.log;version="3.0.0",

+ org.eclipse.fx.core.operation;version="3.0.0",

+ org.eclipse.fx.core.preferences;version="3.0.0",

+ org.eclipse.fx.core.property;version="3.0.0",

+ org.eclipse.fx.core.text;version="3.0.0",

+ org.eclipse.fx.core.update;version="3.0.0"
 Bundle-Vendor: %Bundle-Vendor

 Service-Component: OSGI-INF/services/org.eclipse.fx.core.internal.JAXBObjectSerializer.xml,
  OSGI-INF/services/org.eclipse.fx.core.internal.JUtilLoggerFactory.xml,
@@ -27,7 +29,17 @@
  OSGI-INF/services/org.eclipse.fx.core.internal.FileSystemServiceImpl.xml,
  OSGI-INF/services/org.eclipse.fx.core.internal.DefaultValueSerializer.xml,
  OSGI-INF/services/org.eclipse.fx.core.internal.DynamicDataStreamHandler.xml,
- OSGI-INF/services/org.eclipse.fx.core.internal.TplURLDynamicDataStreamHandler.xml

+ OSGI-INF/services/org.eclipse.fx.core.internal.TplURLDynamicDataStreamHandler.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.OSGiEventBusImpl.xml

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,

  com.google.guava;bundle-version="15.0.0"

+Service-Component: OSGI-INF/services/org.eclipse.fx.core.internal.JAXBObjectSerializer.xml,
+ OSGI-INF/services/org.eclipse.fx.core.adapter.internal.AdapterServiceImpl.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.JUtilLoggerFactory.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.OSGiEventBusImpl.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.TplURLDynamicDataStreamHandler.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.DefaultValueSerializer.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.FileSystemServiceImpl.xml,
+ OSGI-INF/services/org.eclipse.fx.core.internal.DynamicDataStreamHandler.xml

+Bundle-ActivationPolicy: lazy

diff --git a/bundles/runtime/org.eclipse.fx.core/OSGI-INF/services/org.eclipse.fx.core.internal.OSGiEventBusImpl.xml b/bundles/runtime/org.eclipse.fx.core/OSGI-INF/services/org.eclipse.fx.core.internal.OSGiEventBusImpl.xml
new file mode 100644
index 0000000..9d2b8cd
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/OSGI-INF/services/org.eclipse.fx.core.internal.OSGiEventBusImpl.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.core.internal.OSGiEventBusImpl">

+   <service>

+      <provide interface="org.eclipse.fx.core.event.GlobalEventBus"/>

+   </service>

+   <reference bind="registerMessageService" cardinality="1..1" interface="org.osgi.service.event.EventAdmin" name="registerMessageService" policy="static" unbind="unregisterMessageService"/>

+   <implementation class="org.eclipse.fx.core.internal.OSGiEventBusImpl"/>

+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/pom.xml b/bundles/runtime/org.eclipse.fx.core/pom.xml
index 9ded689..0dc0bf1 100755
--- a/bundles/runtime/org.eclipse.fx.core/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.core/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ArrayUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ArrayUtils.java
new file mode 100644
index 0000000..6c87897
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ArrayUtils.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.util.function.IntFunction;
+import java.util.function.Supplier;
+
+/**
+ * Utility methods to deal with arrays
+ * @since 3.0
+ */
+public class ArrayUtils {
+	/**
+	 * The target array to be filled
+	 *
+	 * @param array
+	 *            the array
+	 * @param s
+	 *            the supplier to fetch a value from
+	 */
+	public static <T> void fill(T[] array, Supplier<T> s) {
+		for (int i = 0; i < array.length; i++) {
+			array[i] = s.get();
+		}
+	}
+
+	/**
+	 * The target array to be filled
+	 *
+	 * @param array
+	 *            the array
+	 * @param f
+	 *            the function to apply for each index
+	 */
+	public static <T> void fill(T[] array, IntFunction<T> f) {
+		for (int i = 0; i < array.length; i++) {
+			array[i] = f.apply(i);
+		}
+	}
+
+	/**
+	 * Show an ASCII art with the informations in the array ( - if cell is null,
+	 * x if cell is filled)
+	 *
+	 * @param array
+	 *            the array
+	 */
+	public static <T> void toString(T[][] array) {
+		System.err.println("---------------"); //$NON-NLS-1$
+		for (int i = 0; i < array.length; i++) {
+			for (int j = 0; j < array[i].length; j++) {
+				System.err.print(array[i][j] == null ? " - " : " x ");  //$NON-NLS-1$//$NON-NLS-2$
+			}
+			System.err.println();
+		}
+		System.err.println("---------------"); //$NON-NLS-1$
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ConcurrentUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ConcurrentUtils.java
new file mode 100644
index 0000000..7c19faa
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ConcurrentUtils.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Utilities to deal with concurrencies
+ */
+public class ConcurrentUtils {
+	/**
+	 * Collect the return values of all the futures provided
+	 *
+	 * @param futures
+	 *            the futures the result is collected from
+	 * @return a future with the collected results
+	 */
+	@SafeVarargs
+	public static <T> CompletableFuture<List<T>> collect(CompletableFuture<T>... futures) {
+		return CompletableFuture.allOf(futures)
+				.thenApply(v -> Stream.of(futures).map(f -> f.join()).collect(Collectors.toList()));
+	}
+
+	/**
+	 * Collect the return value of all the futures and apply the transformation
+	 * method on it
+	 *
+	 * @param transformer
+	 *            the transformation to apply
+	 * @param futures
+	 *            the future
+	 * @return a future with the collected results
+	 */
+	@SafeVarargs
+	public static <T, O> CompletableFuture<List<T>> collect(Function<O, T> transformer,
+			CompletableFuture<O>... futures) {
+		return CompletableFuture.allOf(futures).thenApply(
+				v -> Stream.of(futures).map(f -> f.join()).map(transformer::apply).collect(Collectors.toList()));
+	}
+
+	/**
+	 * Collect the returned lists of the the futures and combine them into a
+	 * flat list
+	 *
+	 * @param futures
+	 *            the futures
+	 * @return a future holding the combined list of all future results
+	 */
+	@SafeVarargs
+	public static <T> CompletableFuture<List<T>> collectLists(CompletableFuture<List<T>>... futures) {
+		return CompletableFuture.allOf(futures)
+				.thenApply(v -> Stream.of(futures).flatMap(f -> f.join().stream()).collect(Collectors.toList()));
+	}
+
+	/**
+	 * Collect the returned lists of the the futures and combine them into a
+	 * flat list and transform the entries
+	 *
+	 * @param transformer
+	 *            the transformer
+	 * @param futures
+	 *            the futures
+	 * @return a future holding the combined and transformed list
+	 */
+	@SafeVarargs
+	public static <T, O> CompletableFuture<List<T>> collectLists(Function<O, T> transformer,
+			CompletableFuture<List<O>>... futures) {
+		return CompletableFuture.allOf(futures).thenApply(v -> Stream.of(futures).flatMap(f -> f.join().stream())
+				.map(transformer::apply).collect(Collectors.toList()));
+	}
+
+	/**
+	 * Collect the result by transforming the stream of feature results into a
+	 * final result of all futures
+	 *
+	 * @param streamTransformer the transformer
+	 * @param futures the futures
+	 * @return a future hold the collection of all futures
+	 */
+	@SafeVarargs
+	public static <T, O> CompletableFuture<List<T>> collectWithStream(Function<Stream<O>, Stream<T>> streamTransformer,
+			CompletableFuture<O>... futures) {
+		return CompletableFuture.allOf(futures).thenApply(
+				v -> streamTransformer.apply(Stream.of(futures).map(f -> f.join())).collect(Collectors.toList()));
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/IOUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/IOUtils.java
new file mode 100644
index 0000000..ed24367
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/IOUtils.java
@@ -0,0 +1,203 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.eclipse.fx.core.function.ExExecutor;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * Utilities for IO operations
+ *
+ * @since 3.0
+ */
+public class IOUtils {
+	/**
+	 * Read the input stream into a string
+	 *
+	 * @param in
+	 *            the stream
+	 * @param charset
+	 *            the charset to be used
+	 * @return the string
+	 */
+	public static String readToString(InputStream in, Charset charset) {
+		return readToString(in, 1024, charset);
+	}
+
+	/**
+	 * Read the input stream into a string
+	 *
+	 * @param in
+	 *            the stream
+	 * @param bufferLength
+	 *            the buffer length
+	 * @param charset
+	 *            the charset
+	 * @return the string
+	 */
+	public static String readToString(InputStream in, int bufferLength, Charset charset) {
+		StringBuilder b = new StringBuilder();
+		char[] buf = new char[bufferLength];
+		InputStreamReader r = new InputStreamReader(in, charset);
+		int l;
+		try {
+			while ((l = r.read(buf, 0, bufferLength)) != -1) {
+				b.append(buf, 0, l);
+			}
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+
+		return b.toString();
+	}
+
+	/**
+	 * Copy the complete input stream to an output stream
+	 *
+	 * @param sourceStream
+	 *            the source stream
+	 * @param targetStream
+	 *            the output stream
+	 * @throws IOException
+	 *             if something is going wrong
+	 */
+	public static void copyToStream(InputStream sourceStream, OutputStream targetStream) throws IOException {
+		byte[] buf = new byte[1024];
+		int l;
+		while ((l = sourceStream.read(buf)) != -1) {
+			targetStream.write(buf, 0, l);
+		}
+	}
+
+	/**
+	 * Zip up a complete directory with all the sub directories
+	 *
+	 * @param dir
+	 *            the directory to zip
+	 * @param zipFile
+	 *            the zip file or <code>null</code> if you want a temporary zip
+	 *            file to be created
+	 * @return the directory
+	 * @throws IOException
+	 *             if somethings going wrong
+	 * @since 2.3.0
+	 */
+	@SuppressWarnings("null")
+	public static @NonNull Path zipDirectory(@NonNull Path dir, @Nullable Path zipFile) throws IOException {
+		Path target = zipFile;
+		if (target == null) {
+			target = Files.createTempFile("generated-zip", ".zip"); //$NON-NLS-1$//$NON-NLS-2$
+		}
+
+		try (ZipOutputStream out = new ZipOutputStream(Files.newOutputStream(target))) {
+			for (Path c : Files.list(dir).collect(Collectors.toList())) {
+				if (!c.equals(target)) {
+					addEntry(out, dir, c);
+				}
+			}
+
+			out.close();
+		}
+
+		return target;
+	}
+
+	/**
+	 * Read the content for the given path
+	 *
+	 * @param path
+	 *            the path
+	 * @return the content
+	 * @throws IOException
+	 *             if an I/O error occurs
+	 * @since 2.0
+	 */
+	public static String slurpFileContent(Path path) throws IOException {
+		byte[] buf = new byte[(int) Files.size(path)];
+
+		try (InputStream in = Files.newInputStream(path)) {
+			in.read(buf);
+			return new String(buf);
+		}
+	}
+
+	/**
+	 * Convert an URL to a path on the local filesystem
+	 *
+	 * @param url
+	 *            the url
+	 * @param copyIfNeeded
+	 *            <code>true</code> if the url can not be converted to a local
+	 *            the content is copied to the local filesystem
+	 * @return the path
+	 * @since 2.2.0
+	 */
+	public static Optional<Resource<@NonNull Path>> getLocalPath(@NonNull URL url, boolean copyIfNeeded) {
+		return ServiceUtils.getServiceList(URLResolver.class).stream().filter(r -> r.test(url)).findFirst().map(r -> Optional.of(Resource.createResource(r.resolveToLocalPath(url)))).orElseGet(() -> copyIfNeeded ? ExExecutor.executeSupplier(() -> copyToTempFile(url), "Unable to copy resource") //$NON-NLS-1$
+				: Optional.empty());
+	}
+
+	/**
+	 * Convert an URL to a path on the local filesystem
+	 *
+	 * @param url
+	 *            the url
+	 * @return the path
+	 * @since 2.2.0
+	 */
+	public static Optional<URL> getLocalURL(@NonNull URL url) {
+		return ServiceUtils.getServiceList(URLResolver.class).stream().filter(r -> r.test(url)).findFirst().map(r -> r.resolveToLocalURL(url));
+	}
+
+	private static Resource<@NonNull Path> copyToTempFile(@NonNull URL url) throws IOException {
+		Path path = Files.createTempFile("tmp", Paths.get(url.getPath()).getFileName().toString()); //$NON-NLS-1$
+
+		try (InputStream stream = url.openStream()) {
+			Files.copy(stream, path);
+		}
+
+		if (path == null) {
+			return null;
+		}
+
+		return Resource.createTempResource(path);
+	}
+
+	private static void addEntry(ZipOutputStream out, Path rootPath, Path p) throws IOException {
+		if (Files.isDirectory(p)) {
+			for (Path c : Files.list(p).collect(Collectors.toList())) {
+				addEntry(out, rootPath, c);
+			}
+		} else {
+			ZipEntry e = new ZipEntry(rootPath.relativize(p).toString());
+			out.putNextEntry(e);
+			try (InputStream s = Files.newInputStream(p)) {
+				copyToStream(s, out);
+			}
+			out.closeEntry();
+		}
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/NumberUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/NumberUtils.java
new file mode 100644
index 0000000..4047e87
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/NumberUtils.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+/**
+ * Utilities to deal with numbers
+ *
+ * @since 3.0
+ */
+public class NumberUtils {
+	/**
+	 * Constraint the given value to the upper and lower bound
+	 *
+	 * @param v
+	 *            the value to constraint
+	 * @param min
+	 *            the lower bound (only values >= 0 are applied)
+	 * @param max
+	 *            the upper bound (only values >= 0 are applied)
+	 * @return the value
+	 * @since 2.2.0
+	 */
+	public static double unsignedConstraintValue(double v, double min, double max) {
+		double rv = v;
+		if (min >= 0) {
+			rv = Math.max(rv, min);
+		}
+
+		if (max >= 0) {
+			rv = Math.min(rv, max);
+		}
+		return rv;
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/OSGiUtil.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/OSGiUtil.java
index 7489ce7..5ba937b 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/OSGiUtil.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/OSGiUtil.java
@@ -12,7 +12,9 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -61,7 +63,7 @@
 			}
 		}
 
-		Bundle b = FrameworkUtil.getBundle(Util.class);
+		Bundle b = FrameworkUtil.getBundle(OSGiUtil.class);
 		BundleContext ctx = null;
 
 		if (b != null) {
@@ -106,4 +108,67 @@
 			return -1 * Integer.compare(i1, i2);
 		}
 	}
+
+	public static <S> List<org.eclipse.fx.core.ServiceUtils.ServiceReference<S>> lookupServiceReferenceList(Class<?> requestor, Class<S> serviceClass) {
+		List<Class<?>> cl = new ArrayList<>();
+		if (requestor != null) {
+			cl.add(requestor);
+		}
+		cl.add(serviceClass);
+		BundleContext ctx = getContext(cl);
+
+		try {
+			@SuppressWarnings("unchecked")
+			ServiceReference<S>[] serviceReferences = (ServiceReference<S>[]) ctx
+					.getServiceReferences(serviceClass.getName(), null);
+			if (serviceReferences == null) {
+				return Collections.emptyList();
+			}
+			List<org.eclipse.fx.core.ServiceUtils.ServiceReference<S>> list = Stream.of(serviceReferences).map(r -> new ServiceReferenceImpl<>(r, ctx)).sorted()
+					.collect(Collectors.toList());
+			Collections.reverse(list);
+			return list;
+		} catch (InvalidSyntaxException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	static class ServiceReferenceImpl<S> implements org.eclipse.fx.core.ServiceUtils.ServiceReference<S> {
+		private final ServiceReference<S> ref;
+		private final BundleContext ctx;
+		private S serviceInstance;
+		private KeyValueStore<String, Object> properties;
+
+		public ServiceReferenceImpl(ServiceReference<S> ref, BundleContext ctx) {
+			this.ref = ref;
+			this.ctx = ctx;
+		}
+
+		@Override
+		public S get() {
+			if( this.serviceInstance == null ) {
+				this.serviceInstance = this.ctx.getService(this.ref);
+			}
+			return this.serviceInstance;
+		}
+
+		@Override
+		public int getRanking() {
+			Object ranking = this.ref.getProperty("service.ranking"); //$NON-NLS-1$
+			return ranking == null ? 0 : ranking instanceof Integer ? ((Integer)ranking).intValue() : Integer.parseInt(ranking.toString());
+		}
+
+		@Override
+		public KeyValueStore<String, Object> getProperties() {
+			// TODO create the KeyValueStore lazy
+			if( this.properties == null ) {
+				Map<String, Object> p = new HashMap<String, Object>();
+				for( String s : this.ref.getPropertyKeys() ) {
+					p.put(s, this.ref.getProperty(s));
+				}
+				this.properties = KeyValueStore.fromMap(p);
+			}
+			return this.properties;
+		}
+	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ReflectionUtil.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ReflectionUtil.java
index afeb92b..4874593 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ReflectionUtil.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ReflectionUtil.java
@@ -7,10 +7,15 @@
  *

  * Contributors:

  *     Christoph Keimel <c.keimel@emsw.de> - initial API and implementation

+ *     Tom Schindl <tom.schindl@bestsolution.at> - various improvements

  *******************************************************************************/

 package org.eclipse.fx.core;

 

 import java.lang.reflect.Field;

+import java.security.CodeSource;

+

+import org.osgi.framework.Bundle;

+import org.osgi.framework.FrameworkUtil;

 

 /**

  * Utility Functions using the Java Reflection API

@@ -39,7 +44,7 @@
 		}

 		return field;

 	}

-	

+

 	/**

 	 * Utility method to set a field to a value. If the field is not accessible, it will be set to be accessible.

 	 * @param object Instance in which the value should be set

@@ -56,7 +61,7 @@
 		} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {

 			throw new RuntimeException("Could not set field value: " + object.getClass().getSimpleName() + "." + name, e); //$NON-NLS-1$ //$NON-NLS-2$

 		}

-		

+

 	}

 

 	/**

@@ -77,4 +82,26 @@
 		}

 	}

 

+	/**

+	 * Get a better description of a class (eg. what OSGi-Bundle, Jar, Java9 Module, ... it is found in)

+	 * @param cl the clazz

+	 * @return description

+	 */

+	public static String describeClass(Class<?> cl) {

+		if (SystemUtils.isOsgiEnv()) {

+			Bundle b = FrameworkUtil.getBundle(cl);

+			if (b != null) {

+				return b.getSymbolicName() + ":" + b.getVersion() + ":" + cl.getName(); //$NON-NLS-1$ //$NON-NLS-2$

+			}

+		}

+

+		CodeSource clazzCS = cl.getProtectionDomain().getCodeSource();

+		if (clazzCS != null) {

+			return clazzCS.getLocation() + ">" + cl.getName(); //$NON-NLS-1$

+		}

+		if (cl.getClassLoader() == null) {

+			return cl.getName() + " [via bootstrap classloader]"; //$NON-NLS-1$

+		}

+		return cl.getName();

+	}

 }

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Resource.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Resource.java
index f1bb375..ef2f66d 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Resource.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Resource.java
@@ -55,7 +55,7 @@
 				try {
 					return Files.deleteIfExists(path);
 				} catch (IOException e) {
-					LoggerCreator.createLogger(Util.class).error("Unable to delete path '" + path + "'", e); //$NON-NLS-1$//$NON-NLS-2$
+					LoggerCreator.createLogger(Resource.class).error("Unable to delete path '" + path + "'", e); //$NON-NLS-1$//$NON-NLS-2$
 				}
 				return false;
 			}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ServiceUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ServiceUtils.java
new file mode 100644
index 0000000..cdd7a8a
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ServiceUtils.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.fx.core.internal.JavaDSServiceProcessor;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * Utilities to look up OSGi-Declarative services in and outside OSGi
+ *
+ * @since 3.0
+ */
+public class ServiceUtils {
+	static <S> @Nullable S _lookupService(@Nullable Class<?> requestor, @NonNull Class<S> serviceClass) {
+		List<@NonNull S> _lookupServiceList = _lookupServiceList(requestor, serviceClass);
+		if (!_lookupServiceList.isEmpty()) {
+			return _lookupServiceList.get(0);
+		}
+		return null;
+	}
+
+	static <S> @Nullable S _lookupService(@Nullable Class<?> requestor, @NonNull String serviceClass) {
+		List<@NonNull S> _lookupServiceList = _lookupServiceList(requestor, serviceClass);
+		if (!_lookupServiceList.isEmpty()) {
+			return _lookupServiceList.get(0);
+		}
+		return null;
+	}
+
+	static <S> @NonNull List<@NonNull S> _lookupServiceList(@Nullable Class<?> requestor,
+			@NonNull Class<S> serviceClass) {
+		if (SystemUtils.isOsgiEnv()) {
+			return OSGiUtil.lookupServiceList(requestor, serviceClass);
+		} else {
+			return JavaDSServiceProcessor.lookupServiceList(requestor, serviceClass);
+		}
+	}
+
+	@SuppressWarnings("null")
+	static <S> @NonNull List<@NonNull S> _lookupServiceList(@Nullable Class<?> requestor,
+			@NonNull String serviceClass) {
+		if (SystemUtils.isOsgiEnv()) {
+			// return OSGiUtil.lookupServiceList(requestor, serviceClass);
+			return Collections.emptyList();
+		} else {
+			return JavaDSServiceProcessor.lookupServiceList(requestor, serviceClass);
+		}
+	}
+
+	/**
+	 * Lookup the service with the given type
+	 *
+	 * @param serviceClass
+	 *            the service class type
+	 * @return the service with the highest rank as an optional
+	 * @since 2.2.0
+	 */
+	@SuppressWarnings("null")
+	public static <S> @NonNull Optional<S> getService(@NonNull Class<S> serviceClass) {
+		@Nullable
+		S v = _lookupService(null, serviceClass);
+		if (v == null) {
+			return Optional.empty();
+		} else {
+			return Optional.of(v);
+		}
+	}
+
+	/**
+	 * Look up the service with the given type
+	 *
+	 * @param requestor
+	 *            the class requesting the service
+	 *
+	 * @param serviceClass
+	 *            the service class type
+	 * @return the service with the highest rank or <code>null</code>
+	 * @since 2.2.0
+	 */
+	@SuppressWarnings("null")
+	public static <S> @NonNull Optional<S> getService(@NonNull Class<?> requestor, @NonNull Class<S> serviceClass) {
+		@Nullable
+		S v = _lookupService(requestor, serviceClass);
+		if (v == null) {
+			return Optional.empty();
+		} else {
+			return Optional.of(v);
+		}
+	}
+
+	/**
+	 * Look up all service with the given type
+	 *
+	 * @param requestor
+	 *            the class requesting the service
+	 *
+	 * @param serviceClass
+	 *            the service class type
+	 * @return the service with the highest rank or <code>null</code>
+	 * @since 1.2
+	 */
+	public static <S> @NonNull List<@NonNull S> getServiceList(@NonNull Class<?> requestor,
+			@NonNull Class<S> serviceClass) {
+		return _lookupServiceList(requestor, serviceClass);
+	}
+
+	/**
+	 * Look up all service with the given type
+	 *
+	 * @param serviceClass
+	 *            the service class type
+	 * @return the service with the highest rank or <code>null</code>
+	 * @since 1.2
+	 */
+	public static <S> @NonNull List<@NonNull S> getServiceList(@NonNull Class<S> serviceClass) {
+		return _lookupServiceList(null, serviceClass);
+	}
+
+	/**
+	 * Look up the highest ranked service reference for the provided type
+	 *
+	 * @param clazz
+	 *            the service class type
+	 * @return the service reference with the highest rank as an optional
+	 */
+	public static <S> Optional<ServiceReference<S>> getServiceReference(Class<S> clazz) {
+		List<ServiceReference<S>> list = getServiceReferenceList(clazz);
+		if (list.isEmpty()) {
+			return Optional.empty();
+		}
+		return Optional.of(list.get(0));
+	}
+
+	/**
+	 * Look up the highest ranked service reference for the provided type
+	 *
+	 * @param requestor
+	 *            the requestor
+	 *
+	 * @param clazz
+	 *            the service class type
+	 * @return the service reference with the highest rank as an optional
+	 */
+	public static <S> Optional<ServiceReference<S>> getServiceReference(Class<?> requestor, Class<S> clazz) {
+		List<ServiceReference<S>> list = getServiceReferenceList(requestor, clazz);
+		if (list.isEmpty()) {
+			return Optional.empty();
+		}
+		return Optional.of(list.get(0));
+	}
+
+	/**
+	 * Look up all service references for the provided type
+	 *
+	 * @param clazz
+	 *            the service class type
+	 * @return list of service references
+	 */
+	public static <S> List<ServiceReference<S>> getServiceReferenceList(Class<S> clazz) {
+		if (SystemUtils.isOsgiEnv()) {
+			return OSGiUtil.lookupServiceReferenceList(null, clazz);
+		} else {
+			return JavaDSServiceProcessor.lookupServiceReferenceList(null, clazz);
+		}
+	}
+
+	/**
+	 * Look up all service references for the provided type
+	 *
+	 * @param requestor
+	 *            the requestor
+	 *
+	 * @param clazz
+	 *            the service class type
+	 * @return list of service references
+	 */
+	public static <S> List<ServiceReference<S>> getServiceReferenceList(Class<?> requestor, Class<S> clazz) {
+		if (SystemUtils.isOsgiEnv()) {
+			return OSGiUtil.lookupServiceReferenceList(requestor, clazz);
+		} else {
+			return JavaDSServiceProcessor.lookupServiceReferenceList(null, clazz);
+		}
+	}
+
+	/**
+	 * Look up the service by its FQN-String name
+	 *
+	 * @param serviceClass
+	 *            the FQN service class name
+	 * @return the highest ranked service as an optional
+	 */
+	public static <S> Optional<S> getService(@NonNull String serviceClass) {
+		@SuppressWarnings("null")
+		S rv = _lookupService(null, serviceClass);
+		return rv == null ? Optional.empty() : Optional.of(rv);
+	}
+
+	/**
+	 * A service reference
+	 *
+	 * @param <S>
+	 *            the service type
+	 */
+	public interface ServiceReference<S> extends Comparable<ServiceReference<S>> {
+		/**
+		 * @return the service instance
+		 */
+		public S get();
+
+		/**
+		 * @return the ranking of the service
+		 */
+		public int getRanking();
+
+		/**
+		 * @return the properties
+		 */
+		public KeyValueStore<String, Object> getProperties();
+
+		@Override
+		default int compareTo(ServiceReference<S> o) {
+			return Integer.compare(getRanking(), o.getRanking());
+		}
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SimpleURI.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SimpleURI.java
index fe89d6d..a4ea08b 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SimpleURI.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SimpleURI.java
@@ -18,7 +18,6 @@
  *
  */
 class SimpleURI implements URI {
-	@SuppressWarnings("null")
 	@NonNull
 	private String[] segments = new String[0];
 
@@ -27,7 +26,7 @@
 
 	@NonNull
 	private String uri;
-	
+
 	@Nullable
 	private String host = null;
 
@@ -50,7 +49,7 @@
 		if (schemeEnd != -1) {
 			_uri = _uri.substring(schemeEnd + 1);
 		}
-		
+
 		int queryStart = _uri.indexOf('?');
 
 		if (queryStart != -1) {
@@ -61,7 +60,7 @@
 		if( _uri.startsWith("//") ) { //$NON-NLS-1$
 			String[] vals = _uri.substring(2).split("/"); //$NON-NLS-1$
 			if( vals.length > 0 ) {
-				this.segments = new String[vals.length-1];  
+				this.segments = new String[vals.length-1];
 				for( int i = 1; i < vals.length; i++ ) {
 					this.segments[i-1] = vals[i];
 				}
@@ -71,7 +70,7 @@
 			this.segments = _uri.substring(1).split("/"); //$NON-NLS-1$
 		}
 	}
-	
+
 	@Override
 	public String host() {
 		return this.host;
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Status.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Status.java
index 4c33e73..afdf761 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Status.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Status.java
@@ -64,6 +64,19 @@
 	}
 
 	/**
+	 * Create a new value status with {@link State#OK}
+	 *
+	 * @param value
+	 *            the value
+	 * @return a status
+	 * @since 3.0
+	 */
+	@NonNull
+	public static <@Nullable O> ValueStatus<O> ok(O value) {
+		return status(value, State.OK, 0, "", null); //$NON-NLS-1$
+	}
+
+	/**
 	 * Create a new status object
 	 *
 	 * @param state
@@ -98,8 +111,7 @@
 	 * @return the new status instance
 	 */
 	@NonNull
-	public static <@Nullable O> ValueStatus<O> status(@Nullable O value, @NonNull State state, int code,
-			@NonNull String message, @Nullable Throwable t) {
+	public static <@Nullable O> ValueStatus<O> status(@Nullable O value, @NonNull State state, int code, @NonNull String message, @Nullable Throwable t) {
 		return new ValueStatusImpl<O>(value, state, code, message, t);
 	}
 
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/StreamUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/StreamUtils.java
new file mode 100644
index 0000000..735a776
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/StreamUtils.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.util.stream.Stream;
+
+/**
+ * Utilities when working with {@link Stream}
+ */
+public class StreamUtils {
+	/**
+	 * Helper method allowing to insert temporary debug information in an
+	 * {@link Stream} mapping
+	 *
+	 * @param data
+	 *            the data
+	 * @return the data
+	 * @since 2.2.0
+	 */
+	public static <T> T debugStderr(T data) {
+		System.err.println(data);
+		return data;
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SystemUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SystemUtils.java
new file mode 100644
index 0000000..63f9740
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/SystemUtils.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+/**
+ * System utilities
+ *
+ * @since 3.0
+ */
+public class SystemUtils {
+	private static Boolean isOSGi;
+
+	/**
+	 * @return <code>true</code> if we are on JavaFX 2
+	 */
+	public static boolean isFX2() {
+		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	/**
+	 * @return <code>true</code> if we are on JavaFX 9
+	 * @since 2.2.0
+	 */
+	public static boolean isFX9() {
+		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("9"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+	}
+
+	/**
+	 * @return <code>true</code> if we are on JavaFX 8
+	 * @since 2.2.0
+	 */
+	public static boolean isFX8() {
+		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("8"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+	}
+
+	/**
+	 * @return <code>true</code> if running on OSGi
+	 */
+	public static boolean isOsgiEnv() {
+		if (isOSGi == null) {
+			isOSGi = Boolean.FALSE;
+			try {
+				Class.forName("org.osgi.framework.FrameworkUtil"); //$NON-NLS-1$
+				if (org.osgi.framework.FrameworkUtil.getBundle(SystemUtils.class) != null) {
+					isOSGi = Boolean.TRUE;
+				}
+			} catch (Throwable e) {
+				// nothing
+			}
+		}
+		return isOSGi.booleanValue();
+	}
+
+	/**
+	 * @return <code>true</code> if running on OS-X
+	 * @since 2.2.0
+	 */
+	public static boolean isMacOS() {
+		return "Mac OS X".equals(System.getProperty("os.name")); //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	/**
+	 * @return <code>true</code> if running on windows
+	 * @since 2.2.0
+	 */
+	public static boolean isWindows() {
+		return System.getProperty("os.name").toLowerCase().contains("windows"); //$NON-NLS-1$//$NON-NLS-2$
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ThreadSynchronize.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ThreadSynchronize.java
index fdd044e..fca7e1d 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ThreadSynchronize.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/ThreadSynchronize.java
@@ -175,6 +175,56 @@
 	}

 

 	/**

+	 * Schedule a delayed execution on the provided list of properties.

+	 *

+	 * @param delay

+	 *            the delay

+	 * @param consumer

+	 *            the consumer receiving the values of the properties

+	 * @param properties

+	 *            the list of properties

+	 * @return the subscription

+	 * @since 3.0

+	 */

+	default <T> Subscription delayedChangeExecution(long delay, Consumer<List<T>> consumer, @SuppressWarnings("unchecked") Property<T>... properties) {

+		Runnable r = () -> {

+			List<T> l = new ArrayList<>();

+			for (Property<T> p : properties) {

+				l.add(p.getValue());

+			}

+			consumer.accept(l);

+		};

+

+		ChangeListener<T> l = new ChangeListener<T>() {

+			private Subscription currentSubscription;

+

+			@Override

+			public void changed(ObservableValue<? extends T> observable, T oldValue, T newValue) {

+				if (this.currentSubscription != null) {

+					this.currentSubscription.dispose();

+				}

+				this.currentSubscription = scheduleExecution(delay, () -> {

+					r.run();

+					this.currentSubscription = null;

+				});

+			}

+		};

+		for (Property<T> p : properties) {

+			p.addListener(l);

+		}

+

+		return new Subscription() {

+

+			@Override

+			public void dispose() {

+				for (Property<T> p : properties) {

+					p.removeListener(l);

+				}

+			}

+		};

+	}

+

+	/**

 	 * Wraps a runnable so that it is called on the UI thread.

 	 * <p>

 	 * This is handy if you pass a {@link Runnable} as callback into some async

@@ -250,17 +300,16 @@
 	// public <O> void schedule(int priority, O value, Consumer<O> consumer);

 	// }

 

-//TODO Make API in 3.0

-// 	/**

-//	 * Block the UI-Thread in a way that events are still processed until the

-//	 * given condition is released

-//	 *

-//	 * @param blockCondition

-//	 *            the condition

-//	 * @return the value

-//	 */

-//	<T> @Nullable T block(@NonNull BlockCondition<T> blockCondition);

-

+	// TODO Make API in 3.0

+	// /**

+	// * Block the UI-Thread in a way that events are still processed until the

+	// * given condition is released

+	// *

+	// * @param blockCondition

+	// * the condition

+	// * @return the value

+	// */

+	// <T> @Nullable T block(@NonNull BlockCondition<T> blockCondition);

 

 	/**

 	 * A block condition

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Tuple.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Tuple.java
index 3afa4ef..fcd3a99 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Tuple.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Tuple.java
@@ -41,4 +41,35 @@
 		this.value1 = value1;
 		this.value2 = value2;
 	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((this.value1 == null) ? 0 : this.value1.hashCode());
+		result = prime * result + ((this.value2 == null) ? 0 : this.value2.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Tuple<?,?> other = (Tuple<?,?>) obj;
+		if (this.value1 == null) {
+			if (other.value1 != null)
+				return false;
+		} else if (!this.value1.equals(other.value1))
+			return false;
+		if (this.value2 == null) {
+			if (other.value2 != null)
+				return false;
+		} else if (!this.value2.equals(other.value2))
+			return false;
+		return true;
+	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/URLUtils.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/URLUtils.java
new file mode 100644
index 0000000..6a10bd6
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/URLUtils.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Optional;
+
+import org.eclipse.fx.core.log.LoggerCreator;
+
+/**
+ * Utilties when working with {@link URL}
+ */
+public class URLUtils {
+	/**
+	 * Create a new URL instance from the provide value
+	 *
+	 * @param url
+	 *            the url
+	 * @return the url instance
+	 * @throws IllegalArgumentException
+	 *             if something wrong with the URL provided
+	 * @since 2.3.0
+	 */
+	public static URL createUrl(String url) {
+		try {
+			return new URL(url);
+		} catch (MalformedURLException e) {
+			throw new IllegalArgumentException(e);
+		}
+	}
+
+	/**
+	 * Create a new URL instance who provides an optional of the creation fails
+	 *
+	 * @param url
+	 *            the url
+	 * @param log
+	 *            <code>true</code> if you want the exception to be logged
+	 * @return the url wrapped in an optional
+	 * @since 2.4.0
+	 */
+	public static Optional<URL> createUrl(String url, boolean log) {
+		try {
+			return Optional.of(new URL(url));
+		} catch (Throwable e) {
+			if (log) {
+				LoggerCreator.createLogger(URLUtils.class).error("Failed to create url from '" + url + "'", e); //$NON-NLS-1$//$NON-NLS-2$
+			}
+			return Optional.empty();
+		}
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Util.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Util.java
index 207304c..cc26dd2 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Util.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/Util.java
@@ -12,53 +12,51 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.io.OutputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.Charset;
-import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
 
-import org.eclipse.fx.core.function.ExExecutor;
-import org.eclipse.fx.core.internal.JavaDSServiceProcessor;
-import org.eclipse.fx.core.log.LoggerCreator;
+import org.eclipse.fx.core.text.TextUtil;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 
 /**
  * Class with static utility methods
+ * @deprecated use specific *Util classes (see methods for references)
  */
+@Deprecated
 public class Util {
 	/**
 	 * @return <code>true</code> if we are on JavaFX 2
+	 * @deprecated use {@link SystemUtils#isFX2()}
 	 */
+	@Deprecated
 	public static boolean isFX2() {
-		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return SystemUtils.isFX2();
 	}
 
 	/**
 	 * @return <code>true</code> if we are on JavaFX 9
 	 * @since 2.2.0
+	 * @deprecated use {@link SystemUtils#isFX9()}
 	 */
+	@Deprecated
 	public static boolean isFX9() {
-		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("9"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+		return SystemUtils.isFX9();
 	}
 
 	/**
 	 * @return <code>true</code> if we are on JavaFX 8
 	 * @since 2.2.0
+	 * @deprecated use {@link SystemUtils#isFX8()}
 	 */
+	@Deprecated
 	public static boolean isFX8() {
-		return System.getProperty("javafx.version") != null && System.getProperty("javafx.version").startsWith("8"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+		return SystemUtils.isFX8();
 	}
 
 	/**
@@ -70,46 +68,21 @@
 	 *            the default if the value is null
 	 * @return a nonnull string
 	 * @since 2.0
+	 * @deprecated use {@link TextUtil#notNull(String, String)}
 	 */
+	@Deprecated
 	@NonNull
 	public static String notNull(@Nullable String value, @NonNull String defaultValue) {
-		return value == null ? defaultValue : value;
+		return TextUtil.notNull(value, defaultValue);
 	}
 
-	private static Boolean isOSGi;
-
 	/**
 	 * @return <code>true</code> if running on OSGi
+	 * @deprecated use {@link SystemUtils#isOsgiEnv()}
 	 */
+	@Deprecated
 	public static boolean isOsgiEnv() {
-		if (isOSGi == null) {
-			isOSGi = Boolean.FALSE;
-			try {
-				Class.forName("org.osgi.framework.FrameworkUtil"); //$NON-NLS-1$
-				if (org.osgi.framework.FrameworkUtil.getBundle(Util.class) != null) {
-					isOSGi = Boolean.TRUE;
-				}
-			} catch (Throwable e) {
-				// nothing
-			}
-		}
-		return isOSGi.booleanValue();
-	}
-
-	private static <S> @Nullable S _lookupService(@Nullable Class<?> requestor, @NonNull Class<S> serviceClass) {
-		List<@NonNull S> _lookupServiceList = _lookupServiceList(requestor, serviceClass);
-		if (!_lookupServiceList.isEmpty()) {
-			return _lookupServiceList.get(0);
-		}
-		return null;
-	}
-
-	private static <S> @NonNull List<@NonNull S> _lookupServiceList(@Nullable Class<?> requestor, @NonNull Class<S> serviceClass) {
-		if (isOsgiEnv()) {
-			return OSGiUtil.lookupServiceList(requestor, serviceClass);
-		} else {
-			return JavaDSServiceProcessor.lookupServiceList(requestor, serviceClass);
-		}
+		return SystemUtils.isOsgiEnv();
 	}
 
 	/**
@@ -122,9 +95,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank or <code>null</code>
 	 * @since 1.2
+	 * @deprecated use {@link ServiceUtils#getService(Class, Class)}
 	 */
+	@Deprecated
 	public static <S> @Nullable S lookupService(@NonNull Class<?> requestor, @NonNull Class<S> serviceClass) {
-		return _lookupService(requestor, serviceClass);
+		return ServiceUtils._lookupService(requestor, serviceClass);
 	}
 
 	/**
@@ -134,9 +109,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank or <code>null</code>
 	 * @since 1.2
+	 * @deprecated use {@link ServiceUtils#getService(Class)}
 	 */
+	@Deprecated
 	public static <S> @Nullable S lookupService(@NonNull Class<S> serviceClass) {
-		return _lookupService(null, serviceClass);
+		return ServiceUtils._lookupService(null,serviceClass);
 	}
 
 	/**
@@ -146,16 +123,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank as an optional
 	 * @since 2.2.0
+	 * @deprecated use {@link ServiceUtils#getService(Class)}
 	 */
-	@SuppressWarnings("null")
+	@Deprecated
 	public static <S> @NonNull Optional<S> getService(@NonNull Class<S> serviceClass) {
-		@Nullable
-		S v = _lookupService(null, serviceClass);
-		if (v == null) {
-			return Optional.empty();
-		} else {
-			return Optional.of(v);
-		}
+		return ServiceUtils.getService(serviceClass);
 	}
 
 	/**
@@ -168,16 +140,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank or <code>null</code>
 	 * @since 2.2.0
+	 * @deprecated use {@link ServiceUtils#getService(Class, Class)}
 	 */
-	@SuppressWarnings("null")
+	@Deprecated
 	public static <S> @NonNull Optional<S> getService(@NonNull Class<?> requestor, @NonNull Class<S> serviceClass) {
-		@Nullable
-		S v = _lookupService(requestor, serviceClass);
-		if (v == null) {
-			return Optional.empty();
-		} else {
-			return Optional.of(v);
-		}
+		return ServiceUtils.getService(requestor, serviceClass);
 	}
 
 	/**
@@ -190,9 +157,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank or <code>null</code>
 	 * @since 1.2
+	 * @deprecated use {@link ServiceUtils#getServiceList(Class, Class)}
 	 */
+	@Deprecated
 	public static <S> @NonNull List<@NonNull S> lookupServiceList(@NonNull Class<?> requestor, @NonNull Class<S> serviceClass) {
-		return _lookupServiceList(requestor, serviceClass);
+		return ServiceUtils.getServiceList(requestor, serviceClass);
 	}
 
 	/**
@@ -202,9 +171,11 @@
 	 *            the service class type
 	 * @return the service with the highest rank or <code>null</code>
 	 * @since 1.2
+	 * @deprecated use {@link ServiceUtils#getServiceList(Class)}
 	 */
+	@Deprecated
 	public static <S> @NonNull List<@NonNull S> lookupServiceList(@NonNull Class<S> serviceClass) {
-		return _lookupServiceList(null, serviceClass);
+		return ServiceUtils.getServiceList(serviceClass);
 	}
 
 	/**
@@ -216,14 +187,11 @@
 	 * @throws IOException
 	 *             if an I/O error occurs
 	 * @since 2.0
+	 * @deprecated use {@link IOUtils#slurpFileContent(Path)}
 	 */
+	@Deprecated
 	public static String slurpFileContent(Path path) throws IOException {
-		byte[] buf = new byte[(int) Files.size(path)];
-
-		try (InputStream in = Files.newInputStream(path)) {
-			in.read(buf);
-			return new String(buf);
-		}
+		return IOUtils.slurpFileContent(path);
 	}
 
 	/**
@@ -234,9 +202,11 @@
 	 * @param charset
 	 *            the charset to be used
 	 * @return the string
+	 * @deprecated use {@link IOUtils#readToString(InputStream, Charset)}
 	 */
+	@Deprecated
 	public static String readToString(InputStream in, Charset charset) {
-		return readToString(in, 1024, charset);
+		return IOUtils.readToString(in, charset);
 	}
 
 	/**
@@ -249,21 +219,11 @@
 	 * @param charset
 	 *            the charset
 	 * @return the string
+	 * @deprecated use {@link IOUtils#readToString(InputStream, int, Charset)}
 	 */
+	@Deprecated
 	public static String readToString(InputStream in, int bufferLength, Charset charset) {
-		StringBuilder b = new StringBuilder();
-		char[] buf = new char[bufferLength];
-		InputStreamReader r = new InputStreamReader(in, charset);
-		int l;
-		try {
-			while ((l = r.read(buf, 0, bufferLength)) != -1) {
-				b.append(buf, 0, l);
-			}
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-
-		return b.toString();
+		return IOUtils.readToString(in, bufferLength, charset);
 	}
 
 	/**
@@ -276,13 +236,11 @@
 	 * @throws IOException
 	 *             if something is going wrong
 	 * @since 2.3.0
+	 * @deprecated use {@link IOUtils#copyToStream(InputStream, OutputStream)}
 	 */
+	@Deprecated
 	public static void copyToStream(InputStream sourceStream, OutputStream targetStream) throws IOException {
-		byte[] buf = new byte[1024];
-		int l;
-		while ((l = sourceStream.read(buf)) != -1) {
-			targetStream.write(buf, 0, l);
-		}
+		IOUtils.copyToStream(sourceStream, targetStream);
 	}
 
 	/**
@@ -297,56 +255,31 @@
 	 * @throws IOException
 	 *             if somethings going wrong
 	 * @since 2.3.0
+	 * @deprecated use {@link IOUtils#zipDirectory(Path, Path)}
 	 */
-	@SuppressWarnings("null")
+	@Deprecated
 	public static @NonNull Path zipDirectory(@NonNull Path dir, @Nullable Path zipFile) throws IOException {
-		Path target = zipFile;
-		if (target == null) {
-			target = Files.createTempFile("generated-zip", ".zip"); //$NON-NLS-1$//$NON-NLS-2$
-		}
-
-		try (ZipOutputStream out = new ZipOutputStream(Files.newOutputStream(target))) {
-			for (Path c : Files.list(dir).collect(Collectors.toList())) {
-				if (!c.equals(target)) {
-					addEntry(out, dir, c);
-				}
-			}
-
-			out.close();
-		}
-
-		return target;
-	}
-
-	private static void addEntry(ZipOutputStream out, Path rootPath, Path p) throws IOException {
-		if (Files.isDirectory(p)) {
-			for (Path c : Files.list(p).collect(Collectors.toList())) {
-				addEntry(out, rootPath, c);
-			}
-		} else {
-			ZipEntry e = new ZipEntry(rootPath.relativize(p).toString());
-			out.putNextEntry(e);
-			try (InputStream s = Files.newInputStream(p)) {
-				copyToStream(s, out);
-			}
-			out.closeEntry();
-		}
+		return IOUtils.zipDirectory(dir, zipFile);
 	}
 
 	/**
 	 * @return <code>true</code> if running on OS-X
 	 * @since 2.2.0
+	 * @deprecated use {@link SystemUtils#isMacOS()}
 	 */
+	@Deprecated
 	public static boolean isMacOS() {
-		return "Mac OS X".equals(System.getProperty("os.name")); //$NON-NLS-1$//$NON-NLS-2$
+		return SystemUtils.isMacOS();
 	}
 
 	/**
 	 * @return <code>true</code> if running on windows
 	 * @since 2.2.0
+	 * @deprecated use {@link SystemUtils#isWindows()}
 	 */
+	@Deprecated
 	public static boolean isWindows() {
-		return System.getProperty("os.name").toLowerCase().contains("windows"); //$NON-NLS-1$//$NON-NLS-2$
+		return SystemUtils.isWindows();
 	}
 
 	/**
@@ -360,17 +293,11 @@
 	 *            the upper bound (only values >= 0 are applied)
 	 * @return the value
 	 * @since 2.2.0
+	 * @deprecated use {@link NumberUtils#unsignedConstraintValue(double, double, double)}
 	 */
+	@Deprecated
 	public static double unsignedConstraintValue(double v, double min, double max) {
-		double rv = v;
-		if (min >= 0) {
-			rv = Math.max(rv, min);
-		}
-
-		if (max >= 0) {
-			rv = Math.min(rv, max);
-		}
-		return rv;
+		return NumberUtils.unsignedConstraintValue(v, min, max);
 	}
 
 	/**
@@ -381,10 +308,11 @@
 	 *            the data
 	 * @return the data
 	 * @since 2.2.0
+	 * @deprecated use {@link StreamUtils#debugStderr(Object)}
 	 */
+	@Deprecated
 	public static <T> T debugStderr(T data) {
-		System.err.println(data);
-		return data;
+		return StreamUtils.debugStderr(data);
 	}
 
 	/**
@@ -397,10 +325,11 @@
 	 *            the content is copied to the local filesystem
 	 * @return the path
 	 * @since 2.2.0
+	 * @deprecated use {@link IOUtils#getLocalPath(URL, boolean)}
 	 */
+	@Deprecated
 	public static Optional<Resource<@NonNull Path>> getLocalPath(@NonNull URL url, boolean copyIfNeeded) {
-		return lookupServiceList(URLResolver.class).stream().filter(r -> r.test(url)).findFirst().map(r -> Optional.of(Resource.createResource(r.resolveToLocalPath(url)))).orElseGet(() -> copyIfNeeded ? ExExecutor.executeSupplier(() -> Util.copyToTempFile(url), "Unable to copy resource") //$NON-NLS-1$
-				: Optional.empty());
+		return IOUtils.getLocalPath(url, copyIfNeeded);
 	}
 
 	/**
@@ -410,23 +339,11 @@
 	 *            the url
 	 * @return the path
 	 * @since 2.2.0
+	 * @deprecated use {@link IOUtils#getLocalURL(URL)}
 	 */
+	@Deprecated
 	public static Optional<URL> getLocalURL(@NonNull URL url) {
-		return lookupServiceList(URLResolver.class).stream().filter(r -> r.test(url)).findFirst().map(r -> r.resolveToLocalURL(url));
-	}
-
-	private static Resource<@NonNull Path> copyToTempFile(@NonNull URL url) throws IOException {
-		Path path = Files.createTempFile("tmp", Paths.get(url.getPath()).getFileName().toString()); //$NON-NLS-1$
-
-		try (InputStream stream = url.openStream()) {
-			Files.copy(stream, path);
-		}
-
-		if (path == null) {
-			return null;
-		}
-
-		return Resource.createTempResource(path);
+		return IOUtils.getLocalURL(url);
 	}
 
 	/**
@@ -438,13 +355,11 @@
 	 * @throws IllegalArgumentException
 	 *             if something wrong with the URL provided
 	 * @since 2.3.0
+	 * @deprecated use {@link URLUtils#createUrl(String)}
 	 */
+	@Deprecated
 	public static URL createUrl(String url) {
-		try {
-			return new URL(url);
-		} catch (MalformedURLException e) {
-			throw new IllegalArgumentException(e);
-		}
+		return URLUtils.createUrl(url);
 	}
 
 	/**
@@ -456,16 +371,11 @@
 	 *            <code>true</code> if you want the exception to be logged
 	 * @return the url wrapped in an optional
 	 * @since 2.4.0
+	 * @deprecated use {@link URLUtils#createUrl(String, boolean)}
 	 */
+	@Deprecated
 	public static Optional<URL> createUrl(String url, boolean log) {
-		try {
-			return Optional.of(new URL(url));
-		} catch (Throwable e) {
-			if (log) {
-				LoggerCreator.createLogger(Util.class).error("Failed to create url from '" + url + "'", e); //$NON-NLS-1$//$NON-NLS-2$
-			}
-			return Optional.empty();
-		}
+		return URLUtils.createUrl(url, log);
 	}
 
 	/**
@@ -477,10 +387,10 @@
 	 *            the length
 	 * @return the created string
 	 * @since 2.4.0
+	 * @deprecated use {@link TextUtil#createRepeatedString(char, int)}
 	 */
+	@Deprecated
 	public static String createRepeatedString(char c, int length) {
-		char[] vals = new char[length];
-		Arrays.fill(vals, ' ');
-		return String.valueOf(vals);
+		return TextUtil.createRepeatedString(c, length);
 	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/BindingStream.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/BindingStream.java
new file mode 100644
index 0000000..81a218d
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/BindingStream.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings;
+
+import java.util.function.Function;
+
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableValue;
+
+/**
+ * allows chaining of binding operations
+ *
+ * @param <T> the stream type
+ *
+ * @since 3.0
+ */
+public interface BindingStream<T> {
+
+	/**
+	 * applies a mapping function to another observable value.
+	 *
+	 * @param map
+	 * @return the {@link BindingStream}
+	 */
+	<S> BindingStream<S> map(Function<T, ObservableValue<S>> map);
+
+	/**
+	 * applies a mapping function to a non observable value.
+	 * changes won't be tracked!
+	 * @param map
+	 * @return the {@link BindingStream}
+	 */
+	<S> BindingStream<S> mapNoObservable(Function<T, S> map);
+
+	/**
+	 * creates the {@link ObjectBinding}
+	 * @return the binding
+	 */
+	@Deprecated
+	ObjectBinding<T> toBinding();
+
+	@Deprecated
+	<S> Property<S> toProperty(Function<T, Property<S>> map);
+	@Deprecated
+	<S> ObjectProperty<S> toObjectProperty(Function<T, ObjectProperty<S>> map);
+	@Deprecated
+	StringProperty toStringProperty(Function<T, StringProperty> map);
+	@Deprecated
+	DoubleProperty toDoubleProperty(Function<T, DoubleProperty> map);
+	@Deprecated
+	BooleanProperty toBooleanProperty(Function<T, BooleanProperty> map);
+	@Deprecated
+	FloatProperty toFloatProperty(Function<T, FloatProperty> map);
+	@Deprecated
+	LongProperty toLongProperty(Function<T, LongProperty> map);
+	@Deprecated
+	IntegerProperty toIntegerProperty(Function<T, IntegerProperty> map);
+
+	/**
+	 * Collect the stream
+	 * @param collector
+	 * @return the terminal type
+	 */
+	<R> R collect(FXCollector<T,R> collector);
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
new file mode 100644
index 0000000..2f9ba78
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
@@ -0,0 +1,1893 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.DoubleFunction;
+import java.util.function.DoubleToIntFunction;
+import java.util.function.DoubleToLongFunction;
+import java.util.function.DoubleUnaryOperator;
+import java.util.function.Function;
+import java.util.function.IntFunction;
+import java.util.function.IntToDoubleFunction;
+import java.util.function.IntToLongFunction;
+import java.util.function.IntUnaryOperator;
+import java.util.function.LongFunction;
+import java.util.function.LongToDoubleFunction;
+import java.util.function.LongToIntFunction;
+import java.util.function.LongUnaryOperator;
+import java.util.function.Predicate;
+import java.util.function.ToDoubleFunction;
+import java.util.function.ToIntFunction;
+import java.util.function.ToLongFunction;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import javafx.beans.binding.Binding;
+import javafx.beans.binding.BooleanExpression;
+import javafx.beans.binding.ListBinding;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.binding.StringBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableBooleanValue;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ListChangeListener.Change;
+import javafx.collections.ObservableList;
+
+import org.eclipse.fx.core.Status;
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.core.ThreadSynchronize;
+import org.eclipse.fx.core.Tuple;
+import org.eclipse.fx.core.bindings.internal.BaseBidiPropertyBinding;
+import org.eclipse.fx.core.bindings.internal.BindingStreamImpl;
+import org.eclipse.fx.core.bindings.internal.ConcatListBinding;
+import org.eclipse.fx.core.bindings.internal.ConcatStringBinding;
+import org.eclipse.fx.core.bindings.internal.FixListBinding;
+import org.eclipse.fx.core.bindings.internal.FlatMapListBinding;
+import org.eclipse.fx.core.bindings.internal.FlatMapValueListBinding;
+import org.eclipse.fx.core.bindings.internal.MapListBinding;
+import org.eclipse.fx.core.bindings.internal.MapObjectBinding;
+import org.eclipse.fx.core.bindings.internal.MapSimpleObjectBinding;
+import org.eclipse.fx.core.bindings.internal.SyncListBinding;
+import org.eclipse.fx.core.bindings.internal.SyncObjectBinding;
+import org.eclipse.fx.core.bindings.internal.TenaryBinding;
+
+/**
+ * Collection of JavaFX bean bindings.
+ *
+ * @since 3.0.0
+ */
+public class FXBindings {
+
+	private static class ConcatListHelper<T> {
+		private final ObservableList<T> concatedList = FXCollections.observableArrayList();
+		final ObservableList<T> roConcatedList = FXCollections.unmodifiableObservableList(this.concatedList);
+
+		@SafeVarargs
+		ConcatListHelper(ObservableList<T>... list) {
+			int[] index = new int[list.length];
+
+			for (int i = 0; i < list.length; i++) {
+				int j = i;
+				index[i] = this.concatedList.size();
+				this.concatedList.addAll(list[i]);
+				list[i].addListener((Change<? extends T> c) -> {
+					while (c.next()) {
+						if (c.wasRemoved()) {
+							this.concatedList.remove(index[j] + c.getFrom(),
+									index[j] + c.getFrom() + c.getRemovedSize());
+							for (int k = j + 1; k < index.length; k++) {
+								index[k] -= c.getRemoved().size();
+							}
+						}
+
+						if (c.wasAdded()) {
+							this.concatedList.addAll(index[j] + c.getFrom(), c.getAddedSubList());
+							for (int k = j + 1; k < index.length; k++) {
+								index[k] += c.getAddedSubList().size();
+							}
+						}
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * Create a concatenated list similar to
+	 * {@link FXCollections#concat(ObservableList...)}
+	 *
+	 * @param lists
+	 *            the source lists
+	 * @return an observable list who is synchronized with the source lists
+	 */
+	@SafeVarargs
+	public static <T> ObservableList<T> concatenatedList(ObservableList<T>... lists) {
+		return new ConcatListHelper<>(lists).roConcatedList;
+	}
+
+	/**
+	 * allows to apply multiple functions before creating a Binding. useful for
+	 * feature paths
+	 *
+	 * @param source
+	 * @return an ObjectBinding
+	 */
+	public static <T> BindingStream<T> bindStream(ObservableValue<T> source) {
+		return new BindingStreamImpl<>(source);
+	}
+
+	/**
+	 * Creates a binding dependending on the value of the condition
+	 *
+	 * @param condition
+	 *            the condition
+	 * @param then
+	 *            the value held by the binding if the condition is
+	 *            <code>true</code>
+	 * @param _else
+	 *            the value held by the binding if the condition is
+	 *            <code>false</code>
+	 * @return the binding
+	 */
+	public static <T> Binding<T> tenaryBinding(ObservableBooleanValue condition, ObservableValue<T> then,
+			ObservableValue<T> _else) {
+		return new TenaryBinding<>(condition, then, _else);
+	}
+
+	/**
+	 * Creates a binding dependending on the value of the condition
+	 *
+	 * @param condition
+	 *            the condition
+	 * @param then
+	 *            the value held by the binding if the condition is
+	 *            <code>true</code>
+	 * @param _else
+	 *            the value held by the binding if the condition is
+	 *            <code>false</code>
+	 * @return the binding
+	 */
+	public static <T> Binding<T> tenaryBinding(ObservableBooleanValue condition, T then, T _else) {
+		return new TenaryBinding<>(condition, then, _else);
+	}
+
+	/**
+	 * Concatenates multiple observable lists together.
+	 *
+	 * @param sources
+	 * @return the concatenated list binding
+	 */
+	@SuppressWarnings("unchecked")
+	public static <A> ListBinding<A> concat(ObservableList<A>... sources) {
+		return new FixListBinding<>(new ConcatListBinding<>(sources));
+	}
+
+	/**
+	 * Concat all non-null and non empty values with the given delimiter
+	 *
+	 * @param delimiter
+	 *            the delimiter to use
+	 * @param sources
+	 *            list of observable
+	 * @return binding with the source concated
+	 */
+	@SafeVarargs
+	public static <T> StringBinding concat(String delimiter, ObservableValue<T>... sources) {
+		return new ConcatStringBinding<>(delimiter, sources);
+	}
+
+	/**
+	 * Maps an observable value to another observable value
+	 *
+	 * @param source
+	 * @param map
+	 * @return the mapped value binding
+	 */
+	public static <A, B> ObjectBinding<B> flatMap(ObservableValue<A> source, Function<A, ObservableValue<B>> map) {
+		return new MapObjectBinding<>(source, map);
+	}
+
+	/**
+	 * Maps an observable value
+	 *
+	 * @param source
+	 * @param map
+	 * @return the mapped value binding
+	 */
+	public static <A, B> ObjectBinding<B> map(ObservableValue<A> source, Function<A, B> map) {
+		return new MapSimpleObjectBinding<>(source, map);
+	}
+
+	/**
+	 * Maps an observable list
+	 *
+	 * @param source
+	 * @param map
+	 * @return the mapped list binding
+	 */
+	public static <A, B> ListBinding<B> mapList(ObservableList<A> source, Function<A, B> map) {
+		return new FixListBinding<>(new MapListBinding<A, B>(source, map));
+	}
+
+	/**
+	 * Flat maps an observable list with observable lists
+	 *
+	 * @param source
+	 * @param map
+	 * @return the flat mapped list binding
+	 */
+	public static <A, B> ListBinding<B> flatMapList(ObservableList<A> source, Function<A, ObservableList<B>> map) {
+		return new FixListBinding<>(new FlatMapListBinding<A, B>(source, map));
+	}
+
+	/**
+	 * Flat maps an observable list with observable values
+	 *
+	 * @param source
+	 * @param map
+	 * @return the flat mapped list binding
+	 */
+	public static <A, B> ListBinding<B> flatMapListValue(ObservableList<A> source,
+			Function<A, ObservableValue<B>> map) {
+		return new FixListBinding<>(new FlatMapValueListBinding<>(source, map));
+	}
+
+	/**
+	 * allows to sync between threads
+	 *
+	 * @param source
+	 * @param thread
+	 * @return the synced list binding
+	 */
+	public static <A> ListBinding<A> syncList(ObservableList<A> source, ThreadSynchronize thread) {
+		return new SyncListBinding<>(source, thread);
+	}
+
+	/**
+	 * allows to sync between threads
+	 *
+	 * @param source
+	 * @param thread
+	 * @return the synced object binding
+	 */
+	public static <A> ObjectBinding<A> sync(ObservableValue<A> source, ThreadSynchronize thread) {
+		return new SyncObjectBinding<>(source, thread);
+	}
+
+	/**
+	 * Bind the content to the source list to the target and apply the converter
+	 * in between
+	 *
+	 * @param target
+	 *            the target list
+	 * @param sourceList
+	 *            the source list
+	 * @param converterFunction
+	 *            the function used to convert
+	 * @param <T>
+	 *            the target type
+	 * @param <E>
+	 *            the source type
+	 * @return the subscription to dispose the binding
+	 */
+	public static <T, E> Subscription bindContent(List<T> target, ObservableList<E> sourceList,
+			Function<E, T> converterFunction) {
+		return bindContent(null, target, sourceList, converterFunction);
+	}
+
+	/**
+	 * Bind the content to the source list to the target and apply the converter
+	 * in between
+	 *
+	 * @param threadSync
+	 *            strategy to synchronize the target on a certain thread, might
+	 *            be <code>null</code>
+	 * @param target
+	 *            the target list
+	 * @param sourceList
+	 *            the source list
+	 * @param converterFunction
+	 *            the function used to convert
+	 * @param <T>
+	 *            the target type
+	 * @param <E>
+	 *            the source type
+	 * @return the subscription to dispose the binding
+	 */
+	public static <T, E> Subscription bindContent(ThreadSynchronize threadSync, List<T> target,
+			ObservableList<E> sourceList, Function<E, T> converterFunction) {
+		List<T> list = sourceList.stream().map(converterFunction).collect(Collectors.toList());
+
+		if (threadSync == null) {
+			if (target instanceof ObservableList<?>) {
+				((ObservableList<T>) target).setAll(list);
+			} else {
+				target.clear();
+				target.addAll(list);
+			}
+		} else {
+			threadSync.asyncExec(() -> {
+				if (target instanceof ObservableList<?>) {
+					((ObservableList<T>) target).setAll(list);
+				} else {
+					target.clear();
+					target.addAll(list);
+				}
+			});
+		}
+		ListChangeListener<E> fl;
+
+		ListChangeListener<E> l = change -> {
+			while (change.next()) {
+				if (change.wasPermutated()) {
+					target.subList(change.getFrom(), change.getTo()).clear();
+					target.addAll(change.getFrom(), transformList(
+							change.getList().subList(change.getFrom(), change.getTo()), converterFunction));
+				} else {
+					if (change.wasRemoved()) {
+						target.subList(change.getFrom(), change.getFrom() + change.getRemovedSize()).clear();
+					}
+					if (change.wasAdded()) {
+						target.addAll(change.getFrom(), transformList(change.getAddedSubList(), converterFunction));
+					}
+				}
+			}
+		};
+		if (threadSync == null) {
+			fl = l;
+			sourceList.addListener(l);
+		} else {
+			fl = change -> {
+				threadSync.asyncExec(() -> l.onChanged(change));
+			};
+			sourceList.addListener(fl);
+		}
+
+		return new Subscription() {
+
+			@Override
+			public void dispose() {
+				if (threadSync == null) {
+					sourceList.removeListener(fl);
+				} else {
+					threadSync.asyncExec(fl, sourceList::removeListener);
+				}
+			}
+		};
+	}
+
+	static class PaddedListBinding<T, E> implements Subscription {
+		final ObservableList<E> sourceList;
+		final IntegerProperty padding;
+		final ListChangeListener<E> l;
+		final IntFunction<T> paddingEntryFactory;
+		final List<T> target;
+		final ThreadSynchronize threadSync;
+
+		PaddedListBinding(ThreadSynchronize threadSync, int padding, List<T> target, ObservableList<E> sourceList,
+				Function<E, T> converterFunction, IntFunction<T> paddingEntryFactory) {
+			this.threadSync = threadSync;
+			this.padding = new SimpleIntegerProperty(this, "padding", padding); //$NON-NLS-1$
+			this.target = target;
+			this.sourceList = sourceList;
+			ListChangeListener<E> l = change -> {
+				while (change.next()) {
+					if (change.wasPermutated()) {
+						target.subList(change.getFrom() + getPadding(), change.getTo() + getPadding()).clear();
+						target.addAll(change.getFrom() + getPadding(), transformList(
+								change.getList().subList(change.getFrom(), change.getTo()), converterFunction));
+					} else {
+						if (change.wasRemoved()) {
+							target.subList(change.getFrom() + getPadding(),
+									change.getFrom() + getPadding() + change.getRemovedSize()).clear();
+						}
+						if (change.wasAdded()) {
+							target.addAll(change.getFrom() + getPadding(),
+									transformList(change.getAddedSubList(), converterFunction));
+						}
+					}
+				}
+			};
+
+			if (threadSync == null) {
+				this.l = l;
+			} else {
+				ListChangeListener<E> ll = change -> {
+					threadSync.asyncExec(() -> l.onChanged(change));
+				};
+				this.l = ll;
+			}
+
+			this.sourceList.addListener(this.l);
+			this.paddingEntryFactory = paddingEntryFactory;
+			this.padding.addListener((o, ol, ne) -> {
+				int iOl = ol == null ? 0 : ol.intValue();
+				int iNe = ne == null ? 0 : ne.intValue();
+
+				if (iOl > iNe) {
+					target.subList(iNe, iOl).clear();
+				} else if (iOl < iNe) {
+					List<T> paddedObjects = IntStream.range(iOl, iNe).mapToObj(paddingEntryFactory)
+							.collect(Collectors.toList());
+					target.addAll(iOl, paddedObjects);
+				}
+			});
+
+			List<T> list = sourceList.stream().map(converterFunction).collect(Collectors.toList());
+
+			if (threadSync == null) {
+				if (padding == 0) {
+					if (target instanceof ObservableList<?>) {
+						((ObservableList<T>) target).setAll(list);
+					} else {
+						target.clear();
+						target.addAll(list);
+					}
+				} else {
+					if (!target.isEmpty()) {
+						target.subList(padding, target.size()).clear();
+						target.addAll(padding, list);
+					} else {
+						List<T> t = IntStream.range(0, padding).mapToObj(paddingEntryFactory)
+								.collect(Collectors.toList());
+						t.addAll(list);
+						target.addAll(t);
+					}
+				}
+			} else {
+				threadSync.asyncExec(() -> {
+					if (padding == 0) {
+						if (target instanceof ObservableList<?>) {
+							((ObservableList<T>) target).setAll(list);
+						} else {
+							target.clear();
+							target.addAll(list);
+						}
+					} else {
+						if (!target.isEmpty()) {
+							target.subList(padding, target.size()).clear();
+							target.addAll(padding, list);
+						} else {
+							List<T> t = IntStream.range(0, padding).mapToObj(paddingEntryFactory)
+									.collect(Collectors.toList());
+							t.addAll(list);
+							target.addAll(t);
+						}
+					}
+				});
+			}
+		}
+
+		/**
+		 * @return padding for the target list
+		 */
+		public final IntegerProperty paddingProperty() {
+			return this.padding;
+		}
+
+		/**
+		 * @return the padding
+		 */
+		public final int getPadding() {
+			return this.paddingProperty().get();
+		}
+
+		/**
+		 * Set a new padding
+		 *
+		 * @param padding
+		 *            a new padding
+		 */
+		public final void setPadding(final int padding) {
+			this.paddingProperty().set(padding);
+		}
+
+		@Override
+		public void dispose() {
+			if (this.threadSync == null) {
+				this.sourceList.remove(this.l);
+			} else {
+				this.threadSync.asyncExec(this.l, this.sourceList::remove);
+			}
+
+		}
+	}
+
+	/**
+	 * Bind the content to the source list to the target with an optional
+	 * padding and apply the converter in between
+	 *
+	 * @param padding
+	 *            the initial padding
+	 * @param target
+	 *            the target
+	 * @param sourceList
+	 *            the source list
+	 * @param converterFunction
+	 *            the converter function
+	 * @param paddingEntryFactory
+	 *            function to consult when filling padding slots
+	 * @return the binding
+	 */
+	public static <T, E> Subscription bindContent(int padding, List<T> target, ObservableList<E> sourceList,
+			Function<E, T> converterFunction, IntFunction<T> paddingEntryFactory) {
+		return bindContent(null, padding, target, sourceList, converterFunction, paddingEntryFactory);
+	}
+
+	/**
+	 * Bind the content to the source list to the target with an optional
+	 * padding and apply the converter in between
+	 *
+	 * @param threadSync
+	 *            strategy to synchronize the target on a certain thread, might
+	 *            be <code>null</code>
+	 * @param padding
+	 *            the initial padding
+	 * @param target
+	 *            the target
+	 * @param sourceList
+	 *            the source list
+	 * @param converterFunction
+	 *            the converter function
+	 * @param paddingEntryFactory
+	 *            function to consult when filling padding slots
+	 * @return the binding
+	 */
+	public static <T, E> Subscription bindContent(ThreadSynchronize threadSync, int padding, List<T> target,
+			ObservableList<E> sourceList, Function<E, T> converterFunction, IntFunction<T> paddingEntryFactory) {
+		return new PaddedListBinding<>(threadSync, padding, target, sourceList, converterFunction, paddingEntryFactory);
+	}
+
+	static <T, E> List<T> transformList(List<? extends E> list, Function<E, T> converterFunction) {
+		return list.stream().map(converterFunction).collect(Collectors.toList());
+	}
+
+	/**
+	 * Registry to track and lookup globally available converters
+	 *
+	 */
+	public static class ConverterRegistry {
+
+		private static Map<Tuple<Class<?>, Class<?>>, Function<?, ?>> map = new HashMap<>();
+
+		static {
+			// TODO add some default mappings here
+			registerConverter(Integer.class, String.class, i -> i.toString());
+			registerConverter(String.class, Integer.class, s -> Integer.valueOf(Integer.parseInt(s)));
+		}
+
+		/**
+		 * registers a converter
+		 *
+		 * @param sourceType
+		 * @param targetType
+		 * @param converter
+		 */
+		public static <S, T> void registerConverter(Class<S> sourceType, Class<T> targetType,
+				Function<S, T> converter) {
+			map.put(new Tuple<Class<?>, Class<?>>(sourceType, targetType), converter);
+		}
+
+		/**
+		 * retrieves a converter
+		 *
+		 * @param sourceType
+		 * @param targetType
+		 * @return the converter or <code>null</code> if none was found
+		 */
+		@SuppressWarnings("unchecked")
+		public static <S, T> Function<S, T> getConverter(Class<S> sourceType, Class<T> targetType) {
+			return (Function<S, T>) map.get(new Tuple<Class<S>, Class<T>>(sourceType, targetType));
+		}
+	}
+
+	/**
+	 * Binding status.
+	 *
+	 */
+	public static interface StatusBinding extends Binding<Status> {
+		// empty
+	}
+
+	/**
+	 * Bidirectional binding between two properties with conversion. The
+	 * conversion is looked up in the {@link ConverterRegistry} if no converter
+	 * is found a runtime exception is thrown
+	 *
+	 * @param target
+	 * @param source
+	 * @param targetType
+	 * @param sourceType
+	 * @return a StatusBinding which can be used to watch conversion failures
+	 *         and to dispose the whole bidi binding
+	 */
+	public static <S, T> StatusBinding bindBidirectional(Property<T> target, Property<S> source, Class<T> targetType,
+			Class<S> sourceType) {
+		// lookup in registry
+		Function<T, S> targetToSource = ConverterRegistry.getConverter(targetType, sourceType);
+		Function<S, T> sourceToTarget = ConverterRegistry.getConverter(sourceType, targetType);
+		if (sourceToTarget == null)
+			throw new RuntimeException("Cannot find converter from " + sourceType + " to " + targetType); //$NON-NLS-1$//$NON-NLS-2$
+		if (targetToSource == null)
+			throw new RuntimeException("Cannot find converter from " + targetType + " to " + sourceType); //$NON-NLS-1$//$NON-NLS-2$
+		return bindBidirectional(target, source, targetToSource, sourceToTarget);
+	}
+
+	/**
+	 * Bidirectional binding between two properties with conversion.
+	 *
+	 * @param target
+	 * @param source
+	 * @param targetToSource
+	 * @param sourceToTarget
+	 * @return a StatusBinding which can be used to watch conversion failures
+	 *         and to dispose the whole bidi binding
+	 */
+	public static <S, T> StatusBinding bindBidirectional(Property<T> target, Property<S> source,
+			Function<T, S> targetToSource, Function<S, T> sourceToTarget) {
+		return new BaseBidiPropertyBinding(target, source) {
+
+			@Override
+			protected void syncTarget() {
+				target.setValue(sourceToTarget.apply(source.getValue()));
+			}
+
+			@Override
+			protected void syncSource() {
+				source.setValue(targetToSource.apply(target.getValue()));
+			}
+		};
+	}
+
+	/**
+	 * Specialized bindings for {@link IntegerProperty}, {@link FloatProperty},
+	 * {@link DoubleProperty}, {@link LongProperty}, {@link BooleanProperty}
+	 */
+	public static class PrimitivesBindings {
+		// ----------------------------------------------------------------------------------------------------------
+		// StringProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/*
+		 * Self
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, StringProperty source,
+				Function<String, String> targetToSource, Function<String, String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * StringProperty as source
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, StringProperty source,
+				Function<T, String> targetToSource, Function<String, T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.getValue()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(IntegerProperty target, StringProperty source,
+				IntFunction<String> targetToSource, ToIntFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(DoubleProperty target, StringProperty source,
+				DoubleFunction<String> targetToSource, ToDoubleFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(FloatProperty target, StringProperty source,
+				DoubleFunction<String> targetToSource, ToDoubleFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(LongProperty target, StringProperty source,
+				LongFunction<String> targetToSource, ToLongFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsLong(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(BooleanProperty target, StringProperty source,
+				Function<Boolean, String> targetToSource, Predicate<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.test(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.apply(Boolean.valueOf(target.get())));
+				}
+			};
+		}
+
+		/*
+		 * StringProperty as target
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(StringProperty target, Property<T> source,
+				Function<String, T> targetToSource, Function<T, String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.getValue()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.setValue(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, IntegerProperty source,
+				ToIntFunction<String> targetToSource, IntFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, DoubleProperty source,
+				ToDoubleFunction<String> targetToSource, DoubleFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, FloatProperty source,
+				ToDoubleFunction<String> targetToSource, DoubleFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, LongProperty source,
+				ToLongFunction<String> targetToSource, LongFunction<String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(StringProperty target, BooleanProperty source,
+				Predicate<String> targetToSource, Function<Boolean, String> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(Boolean.valueOf(source.get())));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.test(target.get()));
+				}
+			};
+		}
+
+		// ----------------------------------------------------------------------------------------------------------
+		// BooleanProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, BooleanProperty source,
+				Predicate<T> targetToSource, Function<Boolean, T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(Boolean.valueOf(source.get())));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.test(target.getValue()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(BooleanProperty target, Property<T> source,
+				Function<Boolean, T> targetToSource, Predicate<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.test(source.getValue()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.setValue(targetToSource.apply(target.getValue()));
+				}
+			};
+		}
+
+		// ----------------------------------------------------------------------------------------------------------
+		// IntegerProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/*
+		 * IntegerProperty as Source
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, IntegerProperty source,
+				ToIntFunction<T> targetToSource, IntFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.getValue()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(DoubleProperty target, IntegerProperty source,
+				DoubleToIntFunction targetToSource, IntToDoubleFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(FloatProperty target, IntegerProperty source,
+				/* FloatToIntFunction */ DoubleToIntFunction targetToSource,
+				/* IntToFloatFunction */IntToDoubleFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(LongProperty target, IntegerProperty source,
+				LongToIntFunction targetToSource, IntToLongFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsLong(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Integer Property as Target
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(IntegerProperty target, Property<T> source,
+				IntFunction<T> targetToSource, ToIntFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.getValue()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.setValue(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(IntegerProperty target, DoubleProperty source,
+				IntToDoubleFunction targetToSource, DoubleToIntFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(IntegerProperty target, FloatProperty source,
+				/* IntToFloatFunction */IntToDoubleFunction targetToSource,
+				/* FloatToIntFunction */ DoubleToIntFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(IntegerProperty target, LongProperty source,
+				IntToLongFunction targetToSource, LongToIntFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Self
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <S> StatusBinding bindBidirectional(IntegerProperty target, IntegerProperty source,
+				IntUnaryOperator targetToSource, IntUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsInt(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsInt(target.get()));
+				}
+			};
+		}
+
+		// ----------------------------------------------------------------------------------------------------------
+		// DoubleProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/*
+		 * Double as Source
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, DoubleProperty source,
+				ToDoubleFunction<T> targetToSource, DoubleFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.getValue()));
+				}
+			};
+		}
+		// Already defined above in the integer area
+		// public static StatusBinding bindBidirectional(IntegerProperty target,
+		// DoubleProperty source, IntToDoubleFunction targetToSource,
+		// DoubleToIntFunction sourceToTarget) {
+		// return null;
+		// }
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(FloatProperty target, DoubleProperty source,
+				/* FloatToDoubleFunction */ DoubleUnaryOperator targetToSource,
+				/* DoubleToFloatFunction */DoubleUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(LongProperty target, DoubleProperty source,
+				LongToDoubleFunction targetToSource, DoubleToLongFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsLong(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Double as Target
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(DoubleProperty target, Property<T> source,
+				DoubleFunction<T> targetToSource, ToDoubleFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.getValue()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.setValue(targetToSource.apply(target.get()));
+				}
+			};
+		}
+
+		// Already defined above integer area
+		// public static StatusBinding bindBidirectional(DoubleProperty target,
+		// IntegerProperty source, DoubleToIntFunction targetToSource,
+		// IntToDoubleFunction sourceToTarget) {
+		// return null;
+		// }
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(DoubleProperty target, FloatProperty source,
+				/* DoubleToFloatFunction */DoubleUnaryOperator targetToSource,
+				/* FloatToDoubleFunction */ DoubleUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(DoubleProperty target, LongProperty source,
+				DoubleToLongFunction targetToSource, LongToDoubleFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Self
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <S> StatusBinding bindBidirectional(DoubleProperty target, DoubleProperty source,
+				DoubleUnaryOperator targetToSource, DoubleUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		// ----------------------------------------------------------------------------------------------------------
+		// FloatProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/*
+		 * Float as Source
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, FloatProperty source,
+				ToDoubleFunction<T> targetToSource, DoubleFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.getValue()));
+				}
+			};
+		}
+		// Already defined above in the integer area
+		// public static StatusBinding bindBidirectional(IntegerProperty target,
+		// FloatProperty source, IntToDoubleFunction targetToSource,
+		// DoubleToIntFunction sourceToTarget) {
+		// return null;
+		// }
+		// Already defined in double area
+		// public static StatusBinding bindBidirectional(DoubleProperty target,
+		// FloatProperty source, /* DoubleToDoubleFunction */
+		// DoubleUnaryOperator targetToSource, /* FloatToDoubleFunction
+		// */DoubleUnaryOperator sourceToTarget) {
+		// return null;
+		// }
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(LongProperty target, FloatProperty source,
+				/* LongToFloatFunction */ LongToDoubleFunction targetToSource,
+				/* FloatToLongFunction */ DoubleToLongFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsLong(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Float as Target
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(FloatProperty target, Property<T> source,
+				DoubleFunction<T> targetToSource, ToDoubleFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.getValue()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.setValue(targetToSource.apply(target.get()));
+				}
+			};
+		}
+		// Already defined above in the integer area
+		// public static StatusBinding bindBidirectional(FloatProperty target,
+		// source, IntegerProperty DoubleToIntFunction targetToSource,
+		// IntToDoubleFunction sourceToTarget) {
+		// return null;
+		// }
+		// Already defined in double area
+		// public static StatusBinding bindBidirectional(FloatProperty target,
+		// DoubleProperty source, /* FloatToDoubleFunction */DoubleUnaryOperator
+		// targetToSource, /* DoubleToDoubleFunction */ DoubleUnaryOperator
+		// sourceToTarget) {
+		// return null;
+		// }
+
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static StatusBinding bindBidirectional(FloatProperty target, LongProperty source,
+				/* LongToFloatFunction */ DoubleToLongFunction targetToSource,
+				/* FloatToLongFunction */ LongToDoubleFunction sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.get()));
+				}
+			};
+		}
+
+		/*
+		 * Self
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <S> StatusBinding bindBidirectional(FloatProperty target, FloatProperty source,
+				DoubleUnaryOperator targetToSource, DoubleUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set((float) sourceToTarget.applyAsDouble(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set((float) targetToSource.applyAsDouble(target.get()));
+				}
+			};
+		}
+
+		// ----------------------------------------------------------------------------------------------------------
+		// LongProperty
+		// ----------------------------------------------------------------------------------------------------------
+		/*
+		 * Long as Source
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <T> StatusBinding bindBidirectional(Property<T> target, LongProperty source,
+				ToLongFunction<T> targetToSource, LongFunction<T> sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.setValue(sourceToTarget.apply(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.getValue()));
+				}
+			};
+		}
+		// Already defined above in the integer area
+		// public static StatusBinding bindBidirectional(IntegerProperty target,
+		// LongProperty source, IntToDoubleFunction targetToSource,
+		// DoubleToIntFunction sourceToTarget) {
+		// return null;
+		// }
+		// Already defined in double area
+		// public static StatusBinding bindBidirectional(DoubleProperty target,
+		// LongProperty source, /* DoubleToDoubleFunction */ DoubleUnaryOperator
+		// targetToSource, /* FloatToDoubleFunction */DoubleUnaryOperator
+		// sourceToTarget) {
+		// return null;
+		// }
+		//
+		// public static StatusBinding bindBidirectional(FloatProperty target,
+		// LongProperty source, /* LongToFloatFunction */ DoubleToLongFunction
+		// targetToSource, /* FloatToLongFunction */ LongToDoubleFunction
+		// sourceToTarget) {
+		// return null;
+		// }
+
+		/*
+		 * Self
+		 */
+		/**
+		 * Bind a properties
+		 *
+		 * @param target
+		 *            the target
+		 * @param source
+		 *            the source
+		 * @param targetToSource
+		 *            the conversion from target to source
+		 * @param sourceToTarget
+		 *            the conversion from source to target
+		 * @return the binding
+		 */
+		public static <S> StatusBinding bindBidirectional(LongProperty target, LongProperty source,
+				LongUnaryOperator targetToSource, LongUnaryOperator sourceToTarget) {
+			return new BaseBidiPropertyBinding(target, source) {
+
+				@Override
+				protected void syncTarget() {
+					target.set(sourceToTarget.applyAsLong(source.get()));
+				}
+
+				@Override
+				protected void syncSource() {
+					source.set(targetToSource.applyAsLong(target.get()));
+				}
+			};
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollector.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollector.java
new file mode 100644
index 0000000..0187cc4
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollector.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings;
+
+/**
+ * Collectors for {@link BindingStream}
+ *
+ * @param <T>
+ *            the stream type
+ * @param <R>
+ *            the return type
+ * @since 3.0
+ */
+public interface FXCollector<T, R> {
+	/**
+	 * Method to construct the final stream result
+	 *
+	 * @param stream
+	 *            the stream
+	 * @return the return type
+	 */
+	public R finish(BindingStream<T> stream);
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollectors.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollectors.java
new file mode 100644
index 0000000..bd1f26c
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXCollectors.java
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings;
+
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import org.eclipse.fx.core.bindings.internal.BindingStreamImpl;
+import org.eclipse.fx.core.bindings.internal.BindingStreamImpl.StreamBinding;
+
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleFloatProperty;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.SimpleLongProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+/**
+ * Standard collectors for {@link BindingStream#collect(FXCollector)}
+ *
+ * @since 3.0
+ */
+public class FXCollectors {
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	@SuppressWarnings("null")
+	public static <T, S> FXCollector<T, Property<S>> toProperty(Function<T, Property<S>> map) {
+		return stream -> {
+			// Remember the binding to prevent GC to clean it up
+			ObjectBinding<Property<S>> binding = stream.mapNoObservable(map).collect(toBinding());
+			ObjectProperty<S> rv = new SimpleObjectProperty<S>() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<Property<S>> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set((S) null);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	@SuppressWarnings("null")
+	public static <T, S> FXCollector<T, ObjectProperty<S>> toObjectProperty(Function<T, ObjectProperty<S>> map) {
+		return stream -> {
+			// Remember the binding to prevent GC to clean it up
+			ObjectBinding<ObjectProperty<S>> binding = stream.mapNoObservable(map).collect(toBinding());
+			ObjectProperty<S> rv = new SimpleObjectProperty<S>() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<ObjectProperty<S>> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set((S) null);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, StringProperty> toStringProperty(Function<T, StringProperty> map) {
+		return stream -> {
+			ObjectBinding<StringProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			StringProperty rv = new SimpleStringProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<StringProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(null);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, DoubleProperty> toDoubleProperty(Function<T, DoubleProperty> map) {
+		return stream -> {
+			ObjectBinding<DoubleProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			DoubleProperty rv = new SimpleDoubleProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<DoubleProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(0.0);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, BooleanProperty> toBooleanProperty(Function<T, BooleanProperty> map) {
+		return stream -> {
+			ObjectBinding<BooleanProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			BooleanProperty rv = new SimpleBooleanProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<BooleanProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(false);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, FloatProperty> toFloatProperty(Function<T, FloatProperty> map) {
+		return stream -> {
+			ObjectBinding<FloatProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			FloatProperty rv = new SimpleFloatProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<FloatProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(0.0f);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, LongProperty> toLongProperty(Function<T, LongProperty> map) {
+		return stream -> {
+			ObjectBinding<LongProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			LongProperty rv = new SimpleLongProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<LongProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(0);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * Construct a property
+	 *
+	 * @param map
+	 *            map the source to the property
+	 * @return the property
+	 */
+	public static <T> FXCollector<T, IntegerProperty> toIntegerProperty(Function<T, IntegerProperty> map) {
+		return stream -> {
+			ObjectBinding<IntegerProperty> binding = stream.mapNoObservable(map).collect(toBinding());
+			IntegerProperty rv = new SimpleIntegerProperty() {
+				@SuppressWarnings("unused")
+				private ObjectBinding<IntegerProperty> b = binding;
+			};
+
+			if (binding.get() != null) {
+				rv.bindBidirectional(binding.get());
+			}
+
+			binding.addListener((o, ol, ne) -> {
+				if (ol != null) {
+					rv.unbindBidirectional(ol);
+				}
+
+				if (ne != null) {
+					rv.bindBidirectional(ne);
+				} else {
+					rv.set(0);
+				}
+			});
+
+			return rv;
+		};
+	}
+
+	/**
+	 * creates the {@link ObjectBinding}
+	 * @return the collector
+	 */
+	public static <T> FXCollector<T, ObjectBinding<T>> toBinding() {
+		return stream -> {
+			return new StreamBinding<>(((BindingStreamImpl<T>) stream).base, ((BindingStreamImpl<T>) stream).path);
+		};
+	}
+
+	/**
+	 * create the {@link ObjectBinding} but replaces the null value with the provided value
+	 * @param nullReplacement the replacement for a null value
+	 * @return the collector
+	 */
+	public static <T> FXCollector<T, ObjectBinding<T>> toBinding(T nullReplacement) {
+		return stream -> {
+			ObjectBinding<T> b = stream.collect(FXCollectors.toBinding());
+
+			ObjectBinding<T> rv = new ObjectBinding<T>() {
+				{
+					bind(b);
+				}
+				@Override
+				protected T computeValue() {
+					return b.get() == null ? nullReplacement : b.get();
+				}
+			};
+
+			return rv;
+		};
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/ObservableWritableValue.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/ObservableWritableValue.java
new file mode 100644
index 0000000..78ffd20
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/ObservableWritableValue.java
@@ -0,0 +1,8 @@
+package org.eclipse.fx.core.bindings;
+
+import javafx.beans.value.ObservableValue;
+import javafx.beans.value.WritableValue;
+
+public interface ObservableWritableValue<T> extends ObservableValue<T>, WritableValue<T> {
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BaseBidiPropertyBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BaseBidiPropertyBinding.java
new file mode 100644
index 0000000..48264a5
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BaseBidiPropertyBinding.java
@@ -0,0 +1,90 @@
+package org.eclipse.fx.core.bindings.internal;
+
+import org.eclipse.fx.core.Status;
+import org.eclipse.fx.core.Status.State;
+import org.eclipse.fx.core.bindings.FXBindings.StatusBinding;
+
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.beans.binding.ObjectBinding;
+
+public abstract class BaseBidiPropertyBinding extends ObjectBinding<Status> implements StatusBinding {
+	private Observable source;
+	private Observable target;
+	private Status curStatus;
+
+	private boolean inUpdate = false;
+
+	public BaseBidiPropertyBinding(Observable target, Observable source) {
+		this.source = source;
+		this.target = target;
+
+		target.addListener(this.onInvalidate);
+		source.addListener(this.onInvalidate);
+
+		_doSourceToTarget();
+	}
+
+	private InvalidationListener onInvalidate = this::onInvalidate;
+	private void onInvalidate(Observable o) {
+		if (o == this.source) {
+			_doSourceToTarget();
+		}
+		else if (o == this.target) {
+			doTargetToSource();
+		}
+	}
+
+	protected abstract void syncTarget();
+
+	private void _doSourceToTarget() {
+		if (this.inUpdate) return;
+		this.inUpdate = true;
+		try {
+			syncTarget();
+			setStatus(Status.ok());
+		}
+		catch (Throwable t) {
+			setStatus(Status.status(State.ERROR, 0, "sourceToTarget failure", t)); //$NON-NLS-1$
+		}
+		finally {
+			this.inUpdate = false;
+		}
+	}
+
+	protected abstract void syncSource();
+
+	private void doTargetToSource() {
+		if (this.inUpdate) return;
+		this.inUpdate = true;
+		try {
+			syncSource();
+			setStatus(Status.ok());
+		}
+		catch (Throwable t) {
+			setStatus(Status.status(State.ERROR, 0, "targetToSource failure", t)); //$NON-NLS-1$
+		}
+		finally {
+			this.inUpdate = false;
+		}
+	}
+
+	@Override
+	public void dispose() {
+		this.source.removeListener(this.onInvalidate);
+		this.target.removeListener(this.onInvalidate);
+		super.dispose();
+	}
+
+
+	private void setStatus(Status s) {
+		this.curStatus = s;
+		invalidate();
+	}
+
+	@Override
+	protected Status computeValue() {
+		return this.curStatus;
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BindingStreamImpl.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BindingStreamImpl.java
new file mode 100644
index 0000000..2f3f9b1
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/BindingStreamImpl.java
@@ -0,0 +1,389 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Function;
+
+import org.eclipse.fx.core.bindings.BindingStream;
+import org.eclipse.fx.core.bindings.FXCollector;
+import org.eclipse.jdt.annotation.NonNull;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleFloatProperty;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.SimpleLongProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class BindingStreamImpl<T> implements BindingStream<T> {
+
+	public final ObservableValue<?> base;
+	public final List<StreamStep<?, ?>> path;
+
+
+	private interface StreamStep<T, S> {
+		S apply(T cur, Set<Observable> toTrack);
+	}
+
+	private static class MapValue<T, S> implements StreamStep<T, S> {
+		private final Function<T, ObservableValue<S>> map;
+		public MapValue(Function<T, ObservableValue<S>> map) {
+			this.map = map;
+		}
+		@SuppressWarnings("null")
+		@Override
+		public S apply(T cur, Set<Observable> toTrack) {
+			if( cur == null ) {
+				return (S)null;
+			}
+			ObservableValue<S> r = this.map.apply((T)cur);
+			toTrack.add(r);
+			return r.getValue();
+		}
+	}
+
+	private static class MapNoObservable<T, S> implements StreamStep<T, S> {
+		private final Function<T, S> map;
+		public MapNoObservable(Function<T, S> map) {
+			this.map = map;
+		}
+		@SuppressWarnings("null")
+		@Override
+		public S apply(T cur, Set<Observable> toTrack) {
+			if( cur == null ) {
+				return (S)null;
+			}
+			return this.map.apply((T)cur);
+		}
+	}
+
+	public static class StreamBinding<T> extends ObjectBinding<T> {
+
+		private ObservableValue<?> base;
+		private List<StreamStep<?, ?>> path;
+
+		private Set<Observable> curToTrack;
+
+		public StreamBinding(ObservableValue<?> base, List<StreamStep<?, ?>> path) {
+			this.base = base;
+			this.path = new ArrayList<>(path);
+			bind(base);
+			this.curToTrack = Collections.singleton(this.base);
+		}
+
+		@Override
+		public void dispose() {
+			if (this.curToTrack != null) {
+				unbind(this.curToTrack.toArray(new Observable[0]));
+			}
+			super.dispose();
+		}
+
+		@SuppressWarnings({"rawtypes", "unchecked"})
+		@Override
+		protected T computeValue() {
+			Set<Observable> toTrack = new HashSet<>();
+			toTrack.add(this.base);
+
+			try {
+				if( this.path.isEmpty() ) {
+					return (T) this.base.getValue();
+				} else {
+					Object cur = this.base.getValue();
+
+					for (StreamStep s : this.path) {
+						cur = s.apply(cur, toTrack);
+					}
+					return (T) cur;
+				}
+			} finally {
+				if (this.curToTrack != null) {
+					unbind(this.curToTrack.toArray(new Observable[0]));
+				}
+				this.curToTrack = toTrack;
+				bind(this.curToTrack.toArray(new Observable[0]));
+
+			}
+		}
+
+	}
+
+
+	public BindingStreamImpl(ObservableValue<?> base) {
+		this.base = base;
+		this.path = new ArrayList<>();
+	}
+
+	private BindingStreamImpl(ObservableValue<?> base, List<StreamStep<?, ?>> path) {
+		this.base = base;
+		this.path = path;
+	}
+
+	@Override
+	public <S> BindingStream<S> map(Function<T, ObservableValue<S>> map) {
+		MapValue<T, S> segment = new MapValue<>(map);
+		this.path.add(segment);
+		return new BindingStreamImpl<S>(this.base, this.path);
+	}
+
+	@Override
+	public <S> BindingStream<S> mapNoObservable(Function<T, S> map) {
+		MapNoObservable<T, S> segment = new MapNoObservable<>(map);
+		this.path.add(segment);
+		return new BindingStreamImpl<S>(this.base, this.path);
+	}
+
+	@Override
+	public ObjectBinding<T> toBinding() {
+		return new StreamBinding<>(this.base, this.path);
+	}
+
+	@Override
+	public <@NonNull R> R collect(FXCollector<T, R> collector) {
+		return collector.finish(this);
+	}
+
+	@Override
+	public <S> Property<S> toProperty(Function<T, Property<S>> map) {
+		// Remember the binding to prevent GC to clean it up
+		ObjectBinding<Property<S>> binding = mapNoObservable(map).toBinding();
+		ObjectProperty<S> rv = new SimpleObjectProperty<S>() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<Property<S>> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set((S)null);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public BooleanProperty toBooleanProperty(Function<T, BooleanProperty> map) {
+		ObjectBinding<BooleanProperty> binding = mapNoObservable(map).toBinding();
+		BooleanProperty rv = new SimpleBooleanProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<BooleanProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(false);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public DoubleProperty toDoubleProperty(Function<T, DoubleProperty> map) {
+		ObjectBinding<DoubleProperty> binding = mapNoObservable(map).toBinding();
+		DoubleProperty rv = new SimpleDoubleProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<DoubleProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(0.0);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public FloatProperty toFloatProperty(Function<T, FloatProperty> map) {
+		ObjectBinding<FloatProperty> binding = mapNoObservable(map).toBinding();
+		FloatProperty rv = new SimpleFloatProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<FloatProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(0.0f);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public IntegerProperty toIntegerProperty(Function<T, IntegerProperty> map) {
+		ObjectBinding<IntegerProperty> binding = mapNoObservable(map).toBinding();
+		IntegerProperty rv = new SimpleIntegerProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<IntegerProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(0);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public LongProperty toLongProperty(Function<T, LongProperty> map) {
+		ObjectBinding<LongProperty> binding = mapNoObservable(map).toBinding();
+		LongProperty rv = new SimpleLongProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<LongProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(0);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public <S> ObjectProperty<S> toObjectProperty(Function<T, ObjectProperty<S>> map) {
+		// Remember the binding to prevent GC to clean it up
+		ObjectBinding<ObjectProperty<S>> binding = mapNoObservable(map).toBinding();
+		ObjectProperty<S> rv = new SimpleObjectProperty<S>() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<ObjectProperty<S>> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set((S)null);
+			}
+		});
+
+		return rv;
+	}
+
+	@Override
+	public StringProperty toStringProperty(Function<T, StringProperty> map) {
+		ObjectBinding<StringProperty> binding = mapNoObservable(map).toBinding();
+		StringProperty rv = new SimpleStringProperty() {
+			@SuppressWarnings("unused")
+			private ObjectBinding<StringProperty> b = binding;
+		};
+
+		if( binding.get() != null ) {
+			rv.bindBidirectional(binding.get());
+		}
+
+		binding.addListener( (o, ol, ne) -> {
+			if( ol != null ) {
+				rv.unbindBidirectional(ol);
+			}
+
+			if( ne != null ) {
+				rv.bindBidirectional(ne);
+			} else {
+				rv.set(null);
+			}
+		});
+
+		return rv;
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatListBinding.java
new file mode 100644
index 0000000..f48751c
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatListBinding.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import javafx.beans.binding.ListBinding;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+
+@SuppressWarnings("javadoc")
+public class ConcatListBinding<A> extends ListBinding<A> {
+
+	private ObservableList<A>[] source;
+
+	@SuppressWarnings("unchecked")
+	public ConcatListBinding(ObservableList<A>... source) {
+		this.source = source;
+		bind(this.source);
+	}
+
+	@Override
+	protected ObservableList<A> computeValue() {
+		return FXCollections.concat(this.source);
+	}
+
+	@Override
+	public void dispose() {
+		unbind(this.source);
+		super.dispose();
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatStringBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatStringBinding.java
new file mode 100644
index 0000000..785371e
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/ConcatStringBinding.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javafx.beans.binding.StringBinding;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class ConcatStringBinding<T> extends StringBinding {
+	private final String delimiter;
+	private final ObservableValue<T>[] sources;
+
+	@SafeVarargs
+	public ConcatStringBinding(String delimiter, ObservableValue<T>... sources) {
+		this.delimiter = delimiter;
+		this.sources = sources;
+		bind(sources);
+	}
+
+	@Override
+	protected String computeValue() {
+		return Stream.of(this.sources)
+					.map( s -> s.getValue())
+					.map( v -> v == null ? "" : v.toString()) //$NON-NLS-1$
+					.filter( v -> ! v.isEmpty())
+					.collect(Collectors.joining(this.delimiter));
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FixListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FixListBinding.java
new file mode 100644
index 0000000..7eb07b4
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FixListBinding.java
@@ -0,0 +1,155 @@
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.List;
+import java.util.Objects;
+
+import javafx.beans.binding.ListBinding;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ListChangeListener.Change;
+import javafx.collections.ObservableList;
+import javafx.collections.WeakListChangeListener;
+
+
+@SuppressWarnings("javadoc")
+public class FixListBinding<A> extends ListBinding<A> {
+	private ObservableList<A> source;
+	private ObservableList<A> fixed;
+	
+	private ListChangeListener<A> changeListener = this::onSourceChange;
+	private WeakListChangeListener<A> weakChangeListener = new WeakListChangeListener<>(this.changeListener);
+	
+	public FixListBinding(ObservableList<A> source) {
+		this.source = source;
+		this.source.addListener(this.weakChangeListener);
+	}
+	
+	private void onSourceChange(Change<? extends A> change) {
+		// make sure that fixed is initialized
+		if (this.fixed == null) {
+			this.fixed = FXCollections.observableArrayList(this.source);
+		}
+		while (change.next()) {
+			// we handle the setAll change explicitly to produce a nice change event
+			if (change.wasRemoved() && change.wasAdded() && change.getRemovedSize() == this.fixed.size()) {
+				
+				int maxIdx = Math.max(change.getRemovedSize(), change.getAddedSize());
+				int firstMismatch = -1;
+				
+				for (int i = 0; i < maxIdx; i++) {
+					final boolean inRemoved = change.getRemovedSize() > i;
+					final boolean inAdded = change.getAddedSize() > i;
+					
+					if (inAdded != inRemoved) {
+						firstMismatch = i;
+						break;
+					}
+					
+					if (inAdded && inRemoved) {
+						A removed = change.getRemoved().get(i);
+						A added = change.getAddedSubList().get(i);
+						
+						if (added == removed || Objects.equals(added, removed)) {
+							// Safe
+						}
+						else {
+							// first mismatch 
+							firstMismatch = i;
+							break;
+						}
+					}
+				}
+				
+				int offset = change.getAddedSize() - change.getRemovedSize();
+				
+				int firstMatchAfterChange = change.getRemovedSize();
+				
+				for (int i = firstMismatch; i < maxIdx; i++) {
+					int idxAdded = i + offset;
+					if (idxAdded < 0) continue;
+					
+					final boolean inRemoved = change.getRemovedSize() > i;
+					final boolean inAdded = change.getAddedSize() > idxAdded;
+//					
+//					if (inRemoved && !inAdded) {
+//						firstMatchAfterChange = idxAdded;
+//					}
+					
+//					if (!inAdded) {
+//						firstMatchAfterChange = i;
+//						if (firstMatchAfterChange == change.getRemovedSize() - 1) firstMatchAfterChange+=1;
+//						break;
+//					}
+//					
+					
+					if (inAdded && inRemoved) {
+						A removed = change.getRemoved().get(i);
+						A added = change.getAddedSubList().get(idxAdded);
+						
+						if (added == removed || Objects.equals(added, removed)) {
+							// Safe
+							firstMatchAfterChange = i;
+							break;
+						}
+						else {
+							// last mismatch 
+						}
+					}
+				}
+				
+				
+				int removed = firstMatchAfterChange - firstMismatch;
+				
+				if (firstMismatch != -1) {
+					List<A> subList = this.fixed.subList(firstMismatch, firstMatchAfterChange);
+					subList.clear();
+					if (offset + removed > 0) {
+						List<? extends A> add = change.getAddedSubList().subList(firstMismatch, firstMismatch + offset + removed);
+						subList.addAll(add);
+					}
+				}
+				else {
+					// replace
+					this.fixed.setAll(change.getAddedSubList());
+				}
+				
+			}
+			else {
+				// standard jfx change handling
+				if (change.wasPermutated()) {
+					this.fixed.subList(change.getFrom(), change.getTo())
+							.clear();
+					this.fixed.addAll(change.getFrom(), change.getList()
+							.subList(change.getFrom(), change.getTo()));
+				} else {
+					if (change.wasRemoved()) {
+						this.fixed.subList(change.getFrom(),
+								change.getFrom() + change.getRemovedSize())
+								.clear();
+					}
+					if (change.wasAdded()) {
+						this.fixed.addAll(change.getFrom(),
+								change.getAddedSubList());
+					}
+				}
+			}
+		}
+		
+		
+	}
+	
+	@Override
+	protected ObservableList<A> computeValue() {
+		if (this.fixed == null) {
+			this.fixed = FXCollections.observableArrayList(this.source);
+		}
+		return this.fixed;
+	}
+	
+	@Override
+	public void dispose() {
+		this.source.removeListener(this.weakChangeListener);
+		super.dispose();
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapListBinding.java
new file mode 100644
index 0000000..fccdec0
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapListBinding.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ListBinding;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+@SuppressWarnings("javadoc")
+public class FlatMapListBinding<A, B> extends ListBinding<B> {
+
+	private Observable[] currentDependencies;
+
+	private ObservableList<A> source;
+	private Function<A, ObservableList<B>> map;
+
+	public FlatMapListBinding(ObservableList<A> source, Function<A, ObservableList<B>> map) {
+		this.source = source;
+		this.map = map;
+	}
+
+	private Observable[] computeDependencies() {
+		List<Observable> toWatch = this.source.stream().map(this.map).collect(Collectors.toList());
+		toWatch.add(this.source);
+		return toWatch.toArray(new Observable[0]);
+	}
+
+	private void updateDependencies() {
+		if (this.currentDependencies != null) {
+			unbind(this.currentDependencies);
+		}
+		this.currentDependencies = computeDependencies();
+		bind(this.currentDependencies);
+	}
+
+	@Override
+	protected ObservableList<B> computeValue() {
+		this.updateDependencies();
+		return FXCollections.observableList(this.source.stream().map(this.map).flatMap(o->o.stream()).collect(Collectors.toList()));
+	}
+
+	@Override
+	public void dispose() {
+		if (this.currentDependencies != null) {
+			unbind(this.currentDependencies);
+			this.currentDependencies = null;
+		}
+		super.dispose();
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapValueListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapValueListBinding.java
new file mode 100644
index 0000000..3c435e7
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/FlatMapValueListBinding.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ListBinding;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+@SuppressWarnings("javadoc")
+public class FlatMapValueListBinding<A, B> extends ListBinding<B> {
+
+	private Observable[] currentDependencies;
+
+	private ObservableList<A> source;
+	private Function<A, ObservableValue<B>> map;
+
+	public FlatMapValueListBinding(ObservableList<A> list, Function<A, ObservableValue<B>> map) {
+		this.source = list;
+		this.map = map;
+		this.updateDependencies();
+	}
+
+	private Observable[] computeDependencies() {
+		List<Observable> toWatch = this.source.stream().map(this.map).collect(Collectors.toList());
+		toWatch.add(this.source);
+		return toWatch.toArray(new Observable[0]);
+	}
+
+	private void updateDependencies() {
+		if (this.currentDependencies != null) {
+			unbind(this.currentDependencies);
+		}
+		this.currentDependencies = computeDependencies();
+		bind(this.currentDependencies);
+	}
+
+
+	@Override
+	protected ObservableList<B> computeValue() {
+		this.updateDependencies();
+		return FXCollections.observableList(this.source.stream().map(this.map).map(v->v.getValue()).collect(Collectors.toList()));
+	}
+
+	@Override
+	public void dispose() {
+		if (this.currentDependencies != null) {
+			unbind(this.currentDependencies);
+			this.currentDependencies = null;
+		}
+		super.dispose();
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapListBinding.java
new file mode 100644
index 0000000..c3b59f6
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapListBinding.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javafx.beans.binding.ListBinding;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+@SuppressWarnings("javadoc")
+public class MapListBinding<A, B> extends ListBinding<B> {
+
+	private ObservableList<A> source;
+	private Function<A, B> map;
+
+	public MapListBinding(ObservableList<A> source, Function<A, B> map) {
+		this.source = source;
+		this.map = map;
+		bind(this.source);
+	}
+
+	@Override
+	protected ObservableList<B> computeValue() {
+		return FXCollections.observableArrayList(this.source.stream().map(this.map).collect(Collectors.toList()));
+	}
+
+	@Override
+	public void dispose() {
+		unbind(this.source);
+		super.dispose();
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapObjectBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapObjectBinding.java
new file mode 100644
index 0000000..aab300a
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapObjectBinding.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.function.Function;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class MapObjectBinding<A, B> extends ObjectBinding<B> {
+
+	private ObservableValue<A> source;
+	private Function<A, ObservableValue<B>> map;
+
+	private Observable next = null;
+
+	public MapObjectBinding(ObservableValue<A> source, Function<A, ObservableValue<B>> map) {
+		this.source = source;
+		this.map = map;
+		bind(this.source);
+	}
+
+
+	@SuppressWarnings("null")
+	@Override
+	protected B computeValue() {
+		if (this.next != null) {
+			unbind(this.next);
+		}
+		A sourceVal = this.source.getValue();
+		if (sourceVal != null) {
+			ObservableValue<B> apply = this.map.apply(sourceVal);
+			this.next = apply;
+			bind(this.next);
+			return apply.getValue();
+		}
+		else {
+			return (B) null;
+		}
+	}
+
+	@Override
+	public void dispose() {
+		if (this.next != null) {
+			unbind(this.next);
+		}
+		unbind(this.source);
+		super.dispose();
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapSimpleObjectBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapSimpleObjectBinding.java
new file mode 100644
index 0000000..3dbaa82
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/MapSimpleObjectBinding.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.util.function.Function;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class MapSimpleObjectBinding<A, B> extends ObjectBinding<B> {
+
+	private ObservableValue<A> source;
+	private Function<A, B> map;
+
+	private Observable next = null;
+
+	public MapSimpleObjectBinding(ObservableValue<A> source, Function<A, B> map) {
+		this.source = source;
+		this.map = map;
+		bind(this.source);
+	}
+
+
+	@SuppressWarnings("null")
+	@Override
+	protected B computeValue() {
+		if (this.next != null) {
+			unbind(this.next);
+		}
+		A sourceVal = this.source.getValue();
+		if (sourceVal != null) {
+			B apply = this.map.apply(sourceVal);
+			return apply;
+		}
+		else {
+			return (B) null;
+		}
+	}
+
+	@Override
+	public void dispose() {
+		unbind(this.source);
+		super.dispose();
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncListBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncListBinding.java
new file mode 100644
index 0000000..a676755
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncListBinding.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import org.eclipse.fx.core.ThreadSynchronize;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ListBinding;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+@SuppressWarnings("javadoc")
+public class SyncListBinding<A> extends ListBinding<A> {
+
+	private SyncedBindingHelperObserver observer;
+
+	private ObservableList<A> source;
+	private ThreadSynchronize thread;
+
+	public  SyncListBinding(ObservableList<A> source, ThreadSynchronize thread) {
+		this.source = source;
+		this.thread = thread;
+
+		syncedBind(this.source);
+	}
+
+	@Override
+	public void dispose() {
+		syncedUnbind(this.source);
+		super.dispose();
+	}
+
+	@Override
+	protected ObservableList<A> computeValue() {
+		return FXCollections.observableArrayList(this.source);
+	}
+
+	/**
+	 * Start observing the dependencies for changes. If the value of one of the
+	 * dependencies changes, the binding is marked as invalid.
+	 *
+	 * @param dependencies
+	 *            the dependencies to observe
+	 */
+	protected final void syncedBind(Observable... dependencies) {
+		if ((dependencies != null) && (dependencies.length > 0)) {
+			if (this.observer == null) {
+				this.observer = new SyncedBindingHelperObserver(this.thread, this);
+			}
+			for (final Observable dep : dependencies) {
+				if (dep != null) {
+					dep.addListener(this.observer);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Stop observing the dependencies for changes.
+	 *
+	 * @param dependencies
+	 *            the dependencies to stop observing
+	 */
+	protected final void syncedUnbind(Observable... dependencies) {
+		if (this.observer != null) {
+			for (final Observable dep : dependencies) {
+				if (dep != null) {
+					dep.removeListener(this.observer);
+				}
+			}
+			this.observer = null;
+		}
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncObjectBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncObjectBinding.java
new file mode 100644
index 0000000..7ae7b83
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncObjectBinding.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import org.eclipse.fx.core.ThreadSynchronize;
+
+import javafx.beans.Observable;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class SyncObjectBinding<A> extends ObjectBinding<A> {
+
+	private SyncedBindingHelperObserver observer;
+
+	private ObservableValue<A> source;
+	private ThreadSynchronize thread;
+
+
+	public SyncObjectBinding(ObservableValue<A> source, ThreadSynchronize thread) {
+		this.source = source;
+		this.thread = thread;
+
+		syncedBind(this.source);
+	}
+
+	@Override
+	public void dispose() {
+		syncedUnbind(this.source);
+		super.dispose();
+	}
+
+	@Override
+	protected A computeValue() {
+		return this.source.getValue();
+	}
+
+	/**
+	 * Start observing the dependencies for changes. If the value of one of the
+	 * dependencies changes, the binding is marked as invalid.
+	 *
+	 * @param dependencies
+	 *            the dependencies to observe
+	 */
+	protected final void syncedBind(Observable... dependencies) {
+		if ((dependencies != null) && (dependencies.length > 0)) {
+			if (this.observer == null) {
+				this.observer = new SyncedBindingHelperObserver(this.thread, this);
+			}
+			for (final Observable dep : dependencies) {
+				if (dep != null) {
+					dep.addListener(this.observer);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Stop observing the dependencies for changes.
+	 *
+	 * @param dependencies
+	 *            the dependencies to stop observing
+	 */
+	protected final void syncedUnbind(Observable... dependencies) {
+		if (this.observer != null) {
+			for (final Observable dep : dependencies) {
+				if (dep != null) {
+					dep.removeListener(this.observer);
+				}
+			}
+			this.observer = null;
+		}
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncedBindingHelperObserver.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncedBindingHelperObserver.java
new file mode 100644
index 0000000..0041f60
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/SyncedBindingHelperObserver.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import java.lang.ref.WeakReference;
+import java.util.Objects;
+
+import org.eclipse.fx.core.ThreadSynchronize;
+
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.beans.binding.Binding;
+
+@SuppressWarnings("javadoc")
+public class SyncedBindingHelperObserver implements InvalidationListener {
+
+	private final ThreadSynchronize thread;
+	private final WeakReference<Binding<?>> ref;
+
+    public SyncedBindingHelperObserver(ThreadSynchronize thread, Binding<?> binding) {
+    	Objects.requireNonNull(binding);
+        this.ref = new WeakReference<Binding<?>>(binding);
+        this.thread = thread;
+    }
+
+    @Override
+    public void invalidated(Observable observable) {
+        this.thread.asyncExec(()->syncedInvalidated(observable));
+    }
+
+    private void syncedInvalidated(Observable observable) {
+    	final Binding<?> binding = this.ref.get();
+        if (binding == null) {
+            observable.removeListener(this);
+        } else {
+            binding.invalidate();
+        }
+    }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/TenaryBinding.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/TenaryBinding.java
new file mode 100644
index 0000000..7a58b70
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/internal/TenaryBinding.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.bindings.internal;
+
+import org.eclipse.jdt.annotation.Nullable;
+
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.value.ObservableBooleanValue;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public class TenaryBinding<T> extends ObjectBinding<T> {
+	private final ObservableBooleanValue condition;
+	@Nullable
+	private final ObservableValue<T> obsThen;
+	@Nullable
+	private final ObservableValue<T> _obsElse;
+
+	@Nullable
+	private final T then;
+	@Nullable
+	private final T _else;
+
+	public TenaryBinding(ObservableBooleanValue condition, ObservableValue<T> then, ObservableValue<T> _else) {
+		this.condition = condition;
+		this.then = null;
+		this._else = null;
+		this._obsElse = _else;
+		this.obsThen = then;
+		bind(condition,then,_else);
+	}
+
+	public TenaryBinding(ObservableBooleanValue condition, T then, T _else) {
+		this.condition = condition;
+		this.obsThen = null;
+		this._obsElse = null;
+		this.then = then;
+		this._else = _else;
+		bind(condition);
+	}
+
+	@Override
+	protected T computeValue() {
+		ObservableValue<T> obsThen = this.obsThen;
+		ObservableValue<T> _obsElse = this._obsElse;
+		return this.condition.get() ?
+				(obsThen == null ? this.then :  obsThen.getValue()) : ( _obsElse == null ? this._else : _obsElse.getValue());
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/Command.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/Command.java
new file mode 100644
index 0000000..26c12ef
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/Command.java
@@ -0,0 +1,213 @@
+/*******************************************************************************
+ * Copyright (c) 2014 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.command;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+import javafx.beans.property.ReadOnlyBooleanProperty;
+import javafx.beans.property.ReadOnlyBooleanWrapper;
+import javafx.collections.FXCollections;
+import javafx.collections.MapChangeListener;
+import javafx.collections.ObservableMap;
+
+/**
+ * Interface representing a command
+ *
+ * @param <T>
+ *            the type returned by this command
+ *
+ * @since 3.0
+ */
+public interface Command<T> {
+
+	/**
+	 * A parameter value
+	 */
+	public static class ParameterValue {
+		/**
+		 * The name of the parameter
+		 */
+		public final String name;
+		/**
+		 * The value of the parameter
+		 */
+		public final String value;
+
+		/**
+		 * Create a new parameter value
+		 *
+		 * @param name
+		 *            the name
+		 * @param value
+		 *            the value
+		 */
+		public ParameterValue(String name, String value) {
+			this.name = name;
+			this.value = value;
+		}
+	}
+
+	/**
+	 * @return property describing the enabled state
+	 */
+	public ReadOnlyBooleanProperty enabledProperty();
+
+	/**
+	 * @return <code>true</code> if property is enabled
+	 */
+	public boolean isEnabled();
+
+	/**
+	 * Execute the command with the provided parameters
+	 *
+	 * @return the result
+	 */
+	public Optional<T> execute();
+
+	/**
+	 * @return Parameters used to execute the command
+	 */
+	public ObservableMap<String, String> parameters();
+
+	/**
+	 * Evaluate if the command can be execute
+	 */
+	public void evaluate();
+
+	/**
+	 * Create a command who uses a supplier
+	 *
+	 * @param action
+	 *            the action
+	 * @return the command instance
+	 */
+	public static <T> Command<T> createCommand(Supplier<T> action) {
+		return createCommand((Function<Map<String,String>, T>) (m -> action.get()));
+	}
+
+	/**
+	 * Create a command who uses the runnable
+	 *
+	 * @param action
+	 *            the action to run
+	 * @return the command instance
+	 */
+	public static Command<Void> createCommand(Runnable action) {
+		return createCommand( (Function<Map<String,String>, Void>) (m -> {
+			action.run();
+			return null;
+		}));
+	}
+
+	/**
+	 * Create a command who uses the provided consumer
+	 * @param action the action
+	 * @return the command instance
+	 */
+	public static Command<Void> createCommand(Consumer<Map<String, String>> action) {
+		return createCommand((Function<Map<String,String>, Void>) (m -> {
+			action.accept(m);
+			return null;
+		}));
+	}
+
+	/**
+	 * Create a simple command executing the provided function
+	 *
+	 * @param action
+	 *            the action
+	 * @return the command instance
+	 */
+	public static <T> Command<T> createCommand(Function<Map<String, String>, T> action) {
+		return new Command<T>() {
+			private ReadOnlyBooleanWrapper enabled = new ReadOnlyBooleanWrapper(this, "enabled", true); //$NON-NLS-1$
+			private ObservableMap<String, String> parameters = FXCollections.observableMap(new HashMap<>());
+
+			@Override
+			public ObservableMap<String, String> parameters() {
+				return this.parameters;
+			}
+
+			@Override
+			public void evaluate() {
+				// nothing to do
+			}
+
+			@Override
+			public ReadOnlyBooleanProperty enabledProperty() {
+				return this.enabled.getReadOnlyProperty();
+			}
+
+			@Override
+			public boolean isEnabled() {
+				return this.enabled.get();
+			}
+
+			@Override
+			public Optional<T> execute() {
+				return Optional.ofNullable(action.apply(new HashMap<>(this.parameters)));
+			}
+		};
+	}
+
+	/**
+	 * Create a simple command executing the provided function
+	 *
+	 * @param action
+	 *            the action
+	 * @param enabledCalculator
+	 *            predicate to calculate the enabled state
+	 * @return the command instance
+	 */
+	public static <T> Command<T> createCommand(Function<Map<String, String>, T> action, Predicate<Map<String, String>> enabledCalculator) {
+		return new Command<T>() {
+			private ReadOnlyBooleanWrapper enabled = new ReadOnlyBooleanWrapper(this, "enabled", true); //$NON-NLS-1$
+			private ObservableMap<String, String> parameters = FXCollections.observableMap(new HashMap<>());
+
+			{
+				this.parameters.addListener((MapChangeListener.Change<? extends String, ? extends String> change) -> {
+					evaluate();
+				});
+			}
+
+			@Override
+			public void evaluate() {
+				this.enabled.set(enabledCalculator.test(this.parameters));
+			}
+
+			@Override
+			public ObservableMap<String, String> parameters() {
+				return this.parameters;
+			}
+
+			@Override
+			public ReadOnlyBooleanProperty enabledProperty() {
+				return this.enabled.getReadOnlyProperty();
+			}
+
+			@Override
+			public boolean isEnabled() {
+				return this.enabled.get();
+			}
+
+			@Override
+			public Optional<T> execute() {
+				return Optional.ofNullable(action.apply(new HashMap<>(this.parameters)));
+			}
+		};
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/CommandService.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/CommandService.java
index fc133b0..7ec47a1 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/CommandService.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/command/CommandService.java
@@ -13,6 +13,7 @@
 import java.util.Map;
 import java.util.Optional;
 
+import org.eclipse.fx.core.event.Topic;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 
@@ -23,6 +24,15 @@
  * @noimplement
  */
 public interface CommandService {
+	public static final Topic<CommandInfo> TOPIC_COMMAND_NOT_HANDLED = new Topic<>("org/eclipse/fx/core/command/notHandled"); //$NON-NLS-1$
+	public static final Topic<CommandInfo> TOPIC_COMMAND_POST_EXECUTE_SUCCESS = new Topic<>("org/eclipse/fx/core/command/execute/post/success"); //$NON-NLS-1$
+	public static final Topic<Object> TOPIC_COMMAND_POST_EXECUTE_FAIL = new Topic<>("org/eclipse/fx/core/command/execute/post/fail"); //$NON-NLS-1$
+	public static final Topic<Object> TOPIC_COMMAND_PRE_EXECUTE = new Topic<>("org/eclipse/fx/core/command/execute/pre"); //$NON-NLS-1$
+
+	public interface CommandInfo {
+
+	}
+
 	/**
 	 * Check if a command exits
 	 *
@@ -53,4 +63,14 @@
 	 * @return the return value of the command
 	 */
 	public <O> Optional<O> execute(@NonNull String commandId, @NonNull Map<@NonNull String, @Nullable Object> parameters);
+
+	/**
+	 * Create a command for the provided id
+	 *
+	 * @param commandId
+	 *            the command id
+	 * @return the command
+	 * @since 3.0
+	 */
+	public <O> Optional<Command<O>> createCommand(@NonNull String commandId);
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/event/GlobalEventBus.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/event/GlobalEventBus.java
new file mode 100644
index 0000000..a85359f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/event/GlobalEventBus.java
@@ -0,0 +1,52 @@
+/*******************************************************************************

+ * Copyright (c) 2016 EM-SOFTWARE and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Christoph Keimel <c.keimel@emsw.de> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.core.event;

+

+import java.util.function.Consumer;

+

+import org.eclipse.fx.core.Subscription;

+import org.eclipse.jdt.annotation.Nullable;

+

+/**

+ * EventBus as OSGi Service to send and receive events

+ * that are compatible with the e4 client EventBus

+ */

+public interface GlobalEventBus extends EventBus {

+	

+	/**

+	 * Publish the event

+	 *

+	 * @param topic

+	 *            the topic on which you want to publish the event

+	 * @param data

+	 *            the data to publish

+	 * @param synchronous

+	 *            <code>true</code> returns after the event has been processed

+	 *            by all subscribers

+	 * @since 2.4.0

+	 */

+	@Override

+	<T> void publish(Topic<T> topic, T data, boolean synchronous);

+

+	/**

+	 * Subscribe to an event topic

+	 *

+	 * @param topic

+	 *            the topic

+	 * @param consumer

+	 *            the consumer

+	 * @return subscription to cancel the subscribtion

+	 * @since 2.4.0

+	 */

+	@Override

+	<@Nullable T> Subscription subscribe(Topic<@Nullable T> topic, Consumer<Event<@Nullable T>> consumer);

+

+}

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/JavaDSServiceProcessor.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/JavaDSServiceProcessor.java
index 37e9e20..90e025d 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/JavaDSServiceProcessor.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/JavaDSServiceProcessor.java
@@ -32,16 +32,19 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 
-import org.eclipse.fx.core.RankedService;
-import org.eclipse.fx.core.Util;
-import org.eclipse.fx.core.function.ExExecutor;
+import org.eclipse.fx.core.IOUtils;
+import org.eclipse.fx.core.KeyValueStore;
+import org.eclipse.fx.core.ServiceUtils;
+import org.eclipse.fx.core.ServiceUtils.ServiceReference;
 import org.eclipse.fx.core.internal.sm.Component;
 import org.eclipse.fx.core.internal.sm.Component11;
 import org.eclipse.fx.core.internal.sm.Component12;
 import org.eclipse.fx.core.internal.sm.Properties;
+import org.eclipse.fx.core.internal.sm.Property;
 import org.eclipse.fx.core.internal.sm.Reference;
 import org.eclipse.fx.core.internal.sm.Reference.ReferenceCardinality;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 
 /**
  * Implements parts of the OSGi-DS-Specification resolving services with it's
@@ -51,8 +54,51 @@
 	private Map<String, Component> componentCache;
 	private Map<String, List<Component>> serviceList;
 	private Map<Class<?>, List<?>> serviceCache = new HashMap<>();
+	private Map<Class<?>, List<ServiceReference<?>>> serviceReferenceCache = new HashMap<>();
 	private static JavaDSServiceProcessor INSTANCE;
 
+	class JavaServiceReference<S> implements ServiceReference<S> {
+		private final Component c;
+		private S service;
+		private KeyValueStore<String, Object> properties;
+
+		public JavaServiceReference(Component c) {
+			this.c = c;
+		}
+
+		@Override
+		public S get() {
+			if( this.service == null ) {
+				try {
+					Class<?> serviceClass = Class.forName(this.c.getImplementation().getClazz());
+					S service = (S) serviceClass.newInstance();
+					process(service);
+					this.service = service;
+				} catch (Throwable e) {
+					throw new RuntimeException(e);
+				}
+			}
+			return this.service;
+		}
+
+		@Override
+		public KeyValueStore<String, Object> getProperties() {
+			// TODO create the KeyValueStore lazy
+			if( this.properties == null ) {
+				this.properties = KeyValueStore.fromMap(this.c.getProperty().stream().collect(Collectors.toMap(Property::getName, Property::getValue)));
+				//TODO Implement Properties
+			}
+			// TODO Auto-generated method stub
+			return this.properties;
+		}
+
+		@Override
+		public int getRanking() {
+			Object object = getProperties().contains("service.ranking") ? getProperties().get("service.ranking") : null; //$NON-NLS-1$ //$NON-NLS-2$
+			return object == null ? 0 : object instanceof Integer ? ((Integer)object).intValue() : Integer.parseInt(object.toString());
+		}
+	}
+
 	/**
 	 * Retrieve all services for the given type ordered by their ranking
 	 *
@@ -69,6 +115,49 @@
 		return INSTANCE._lookupServiceList(requestor, clazz);
 	}
 
+	public synchronized static <S> @NonNull List<@NonNull ServiceReference<@NonNull S>> lookupServiceReferenceList(Class<?> requestor, Class<S> clazz) {
+		if (INSTANCE == null) {
+			INSTANCE = new JavaDSServiceProcessor();
+		}
+		return INSTANCE._lookupServiceReferenceList(requestor, clazz);
+	}
+
+	public static <S> @NonNull List<@NonNull S> lookupServiceList(@Nullable Class<?> requestor,
+			@NonNull String serviceClass) {
+		if (INSTANCE == null) {
+			INSTANCE = new JavaDSServiceProcessor();
+		}
+		Class<S> cl;
+		try {
+			cl = (Class<S>)(Class)Class.forName(serviceClass);
+			return INSTANCE.lookupServiceList(null, cl);
+		} catch (ClassNotFoundException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked", "null" })
+	private synchronized <S> @NonNull List<@NonNull ServiceReference<@NonNull S>> _lookupServiceReferenceList(Class<?> requestor, Class<S> clazz) {
+		List<ServiceReference<?>> list = this.serviceReferenceCache.get(clazz);
+		if( list != null ) {
+			return (List<ServiceReference<S>>)(List)list;
+		}
+		initializeComponentCache();
+
+		List<Component> componentList = this.serviceList.get(clazz.getName());
+		if (componentList != null) {
+			List<ServiceReference<?>> referenceList = componentList
+				.stream()
+				.map(JavaServiceReference::new)
+				.sorted()
+				.collect(Collectors.toList());
+			Collections.reverse(referenceList); // reverse the order so that highest is first
+			this.serviceReferenceCache.put(clazz, referenceList);
+			return (List<ServiceReference<S>>)(List)referenceList;
+		}
+		return Collections.emptyList();
+	}
+
 	@SuppressWarnings({ "unchecked", "null" })
 	private synchronized <S> @NonNull List<@NonNull S> _lookupServiceList(Class<?> requestor, Class<S> clazz) {
 		List<?> list = this.serviceCache.get(clazz);
@@ -77,33 +166,12 @@
 		}
 		initializeComponentCache();
 
-		List<Component> componentList = this.serviceList.get(clazz.getName());
-		if (componentList != null) {
-			List<?> collect = componentList.stream()
-					.map(c -> c.getImplementation().getClazz())
-					.map(c -> ExExecutor.executeFunction(c, className -> Class.forName(className) , "Could not load class '" + c + "'").orElse(null)) //$NON-NLS-1$ //$NON-NLS-2$
-					.filter(c -> c != null)
-					.map(c -> {
-						if (c != null) {
-							return ExExecutor.executeSupplier(c::newInstance, "Could not create instance").get(); //$NON-NLS-1$
-						} else {
-							return null;
-						}
-					}).filter(c -> c != null).sorted((o1, o2) -> {
-						if (o1 instanceof RankedService && o2 instanceof RankedService) {
-							return -1 * Integer.compare(((RankedService) o1).getRanking(), ((RankedService) o2).getRanking());
-						} else {
-							return 0;
-						}
-					}).collect(Collectors.toList());
-			this.serviceCache.put(clazz, collect);
-			collect.stream().forEach(this::process);
-			return (List<S>) collect;
-		}
-		return Collections.emptyList();
+		List<@NonNull S> collect = _lookupServiceReferenceList(requestor, clazz).stream().map(ServiceReference::get).collect(Collectors.toList());
+		this.serviceCache.put(clazz, collect);
+		return collect;
 	}
 
-	private void process(Object o) {
+	void process(Object o) {
 		Component component = this.componentCache.get(o.getClass().getName());
 
 		if (component != null) {
@@ -211,7 +279,7 @@
 					switch (cardinality) {
 					case AT_LEAST_ONE:
 					case MULTIPLE: {
-						List<?> list = Util.lookupServiceList(serviceInterface);
+						List<?> list = ServiceUtils.getServiceList(serviceInterface);
 						if (cardinality == ReferenceCardinality.AT_LEAST_ONE && list.isEmpty()) {
 							logError("Unsatisfied dependency '"+r.getIface()+"'. There must be at least one component providing this service", null);  //$NON-NLS-1$//$NON-NLS-2$
 						} else {
@@ -221,7 +289,7 @@
 					}
 					case MANDATORY:
 					case OPTIONAL: {
-						Optional<?> service = Util.getService(serviceInterface);
+						Optional<?> service = ServiceUtils.getService(serviceInterface);
 						if (ReferenceCardinality.MANDATORY == cardinality && !service.isPresent()) {
 							logError("Unsatisfied dependency '"+r.getIface()+"'. There must be at least one component providing this service", null);  //$NON-NLS-1$//$NON-NLS-2$
 						} else {
@@ -288,7 +356,7 @@
 
 	private Component handle(URL resource) {
 		try (InputStream in = resource.openStream()) {
-			String data = Util.readToString(in, Charset.forName("UTF-8")); //$NON-NLS-1$
+			String data = IOUtils.readToString(in, Charset.forName("UTF-8")); //$NON-NLS-1$
 			JAXBContext jaxbContext;
 			if (data.contains("http://www.osgi.org/xmlns/scr/v1.1.0")) { //$NON-NLS-1$
 				jaxbContext = JAXBContext.newInstance(Component11.class);
@@ -304,4 +372,8 @@
 		}
 		return null;
 	}
+
+
+
+
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/OSGiEventBusImpl.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/OSGiEventBusImpl.java
new file mode 100644
index 0000000..90e4254
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/internal/OSGiEventBusImpl.java
@@ -0,0 +1,106 @@
+/*******************************************************************************

+ * Copyright (c) 2016 EM-SOFTWARE and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Christoph Keimel <c.keimel@emsw.de> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.core.internal;

+

+import java.util.Dictionary;

+import java.util.Hashtable;

+import java.util.function.Consumer;

+

+import org.eclipse.fx.core.Subscription;

+import org.eclipse.fx.core.event.Event;

+import org.eclipse.fx.core.event.GlobalEventBus;

+import org.eclipse.fx.core.event.Topic;

+import org.eclipse.jdt.annotation.Nullable;

+import org.osgi.framework.BundleContext;

+import org.osgi.framework.FrameworkUtil;

+import org.osgi.framework.ServiceRegistration;

+import org.osgi.service.component.annotations.Component;

+import org.osgi.service.component.annotations.Reference;

+import org.osgi.service.event.EventAdmin;

+import org.osgi.service.event.EventConstants;

+import org.osgi.service.event.EventHandler;

+

+/**

+ * Implementation of OSGiEventBus using OSGi EventAdmin Service

+ */

+@Component

+public class OSGiEventBusImpl implements GlobalEventBus {

+	

+	/**

+	 * Copy of IEventBroker.DATA as not to pull in the dependency on e4

+	 */

+	private static final String DATA = "org.eclipse.e4.data"; //$NON-NLS-1$

+

+	private EventAdmin eventAdmin;

+

+	@Reference

+	synchronized void registerMessageService(EventAdmin eventAdmin) {

+		this.eventAdmin = eventAdmin;

+	}

+	synchronized void unregisterMessageService(EventAdmin eventAdmin) {

+		if (this.eventAdmin != null && this.eventAdmin.equals(eventAdmin)) {

+			this.eventAdmin = null;

+		}

+	}

+	

+	@Override

+	public <@Nullable T> void publish(Event<T> event, boolean synchronous) {

+		Dictionary<String, Object> d = new Hashtable<String, Object>(2);

+		d.put(EventConstants.EVENT_TOPIC, event.getTopic());

+		d.put(DATA, event.getData());

+		org.osgi.service.event.Event osgiEvent = new org.osgi.service.event.Event(event.getTopic(), d);

+

+		if (synchronous) {

+			this.eventAdmin.sendEvent(osgiEvent);

+		} else {

+			this.eventAdmin.postEvent(osgiEvent);

+		}

+	}

+

+	@Override

+	public <T> void publish(Topic<T> topic, T data, boolean synchronous) {

+		Dictionary<String, Object> d = new Hashtable<String, Object>(2);

+		d.put(EventConstants.EVENT_TOPIC, topic.topic);

+		d.put(DATA, data);

+		org.osgi.service.event.Event event = new org.osgi.service.event.Event(topic.topic, d);

+

+		if (synchronous) {

+			this.eventAdmin.sendEvent(event);

+		} else {

+			this.eventAdmin.postEvent(event);

+		}

+	}

+	

+	@Override

+	public void publish(String topic, Object data, boolean synchronous) {

+		publish(new Topic<Object>(topic), data, synchronous);

+	}

+	

+	@Override

+	public <@Nullable T> Subscription subscribe(Topic<T> topic, Consumer<Event<T>> consumer) {

+		@SuppressWarnings("unchecked")

+		EventHandler handler = event -> {

+			Object data = event.getProperty(DATA);

+			consumer.accept(new Event<T>(topic, (T)data));

+		};

+		Dictionary<String, Object> properties = new Hashtable<String, Object>(1);

+		properties.put(EventConstants.EVENT_TOPIC, topic.topic);

+		BundleContext bundleContext = FrameworkUtil.getBundle(OSGiEventBusImpl.class).getBundleContext();

+		ServiceRegistration<EventHandler> serviceRegistration = bundleContext.registerService(EventHandler.class, handler, properties);

+		return () -> serviceRegistration.unregister();

+	}

+	

+	@Override

+	public <@Nullable T> Subscription subscribe(String topic, Consumer<Event<T>> consumer) {

+		return subscribe(new Topic<T>(topic), consumer);

+	}

+

+}

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/log/Logger.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/log/Logger.java
index 4a8336e..516e72e 100755
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/log/Logger.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/log/Logger.java
@@ -11,9 +11,11 @@
  *******************************************************************************/

 package org.eclipse.fx.core.log;

 

+import java.util.function.Function;

 import java.util.function.Supplier;

 

 import org.eclipse.jdt.annotation.NonNull;

+import org.eclipse.jdt.annotation.Nullable;

 

 /**

  * Logger interface delegating to real log framework implementation like log4j,

@@ -47,6 +49,26 @@
 	}

 

 	/**

+	 * logs a dynamically created message in the specified log level

+	 *

+	 * @param level

+	 *            the level

+	 * @param value

+	 *            the value

+	 * @param messageCreator

+	 *            function to create the log message

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  log(@NonNull Level level, @Nullable T value,

+			Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(level)) {

+			log(level, messageCreator.apply(value));

+		}

+		return value;

+	}

+

+	/**

 	 * logs a message and an exception in the specified log level

 	 *

 	 * @param level

@@ -66,7 +88,7 @@
 	 * @param messageSupplier

 	 *            the message supplier

 	 * @param t

-	 *            the Exception

+	 *            the exception

 	 * @since 2.2.0

 	 */

 	default void log(@NonNull Level level, @NonNull Supplier<@NonNull String> messageSupplier, @NonNull Throwable t) {

@@ -76,6 +98,29 @@
 	}

 

 	/**

+	 * logs a dynamically created message and an exception in the specified log

+	 * level

+	 *

+	 * @param level

+	 *            the level

+	 * @param value

+	 *            the value to log

+	 * @param messageCreator

+	 *            function to create a message

+	 * @param t

+	 *            the exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T log(@NonNull Level level, @Nullable T value,

+			@NonNull Function<@Nullable T, @NonNull String> messageCreator, @NonNull Throwable t) {

+		if (isEnabled(level)) {

+			log(level, messageCreator.apply(value), t);

+		}

+		return value;

+	}

+

+	/**

 	 * logs a formatted message in the specified log level.

 	 * <p>

 	 * For formatting {@link String#format(String, Object...)} is used. The

@@ -146,6 +191,25 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#TRACE}

+	 *

+	 * @param value

+	 *            the value

+	 * @param messageCreator

+	 *            the message creator

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  trace(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.TRACE)) {

+			trace(messageCreator.apply(value));

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String)} with

 	 * {@link Level#DEBUG}.

 	 *

@@ -170,6 +234,25 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#DEBUG}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T debug(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.DEBUG)) {

+			debug(messageCreator.apply(value));

+		}

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String)} with

 	 * {@link Level#INFO}.

 	 *

@@ -194,6 +277,26 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#INFO}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  info(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.INFO)) {

+			info(messageCreator.apply(value));

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String)} with

 	 * {@link Level#WARNING}.

 	 *

@@ -218,6 +321,25 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#WARNING}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message supplier

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  warning(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.WARNING)) {

+			warning(messageCreator.apply(value));

+		}

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String)} with

 	 * {@link Level#ERROR}.

 	 *

@@ -242,6 +364,25 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#ERROR}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  error(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.ERROR)) {

+			error(messageCreator.apply(value));

+		}

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String)} with

 	 * {@link Level#FATAL}.

 	 *

@@ -266,6 +407,26 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function)} with

+	 * {@link Level#FATAL}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  fatal(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator) {

+		if (isEnabled(Level.FATAL)) {

+			fatal(messageCreator.apply(value));

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#TRACE}.

 	 *

@@ -294,6 +455,28 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function, Throwable)}

+	 * with {@link Level#TRACE}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @param t

+	 *            the exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  trace(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.TRACE)) {

+			trace(messageCreator.apply(value), t);

+		}

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#DEBUG}.

 	 *

@@ -322,6 +505,28 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function, Throwable)}

+	 * with {@link Level#DEBUG}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @param t

+	 *            the exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  debug(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.DEBUG)) {

+			debug(messageCreator.apply(value), t);

+		}

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#INFO}.

 	 *

@@ -350,6 +555,29 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function, Throwable)}

+	 * with {@link Level#INFO}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message supplier

+	 * @param t

+	 *            the exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  info(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.INFO)) {

+			info(messageCreator.apply(value), t);

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#WARNING}.

 	 *

@@ -378,6 +606,29 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, Object, Function, Throwable)} with

+	 * {@link Level#WARNING}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @param t

+	 *            the exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  warning(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.WARNING)) {

+			warning(messageCreator.apply(value), t);

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#ERROR}.

 	 *

@@ -407,6 +658,29 @@
 

 	/**

 	 * convenience method for {@link #log(Level, String, Throwable)} with

+	 * {@link Level#ERROR}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @param t

+	 *            the Exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  error(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.ERROR)) {

+			error(messageCreator.apply(value), t);

+		}

+

+		return value;

+	}

+

+	/**

+	 * convenience method for {@link #log(Level, String, Throwable)} with

 	 * {@link Level#FATAL}.

 	 *

 	 * @see #log(Level, String, Throwable)

@@ -434,6 +708,29 @@
 	}

 

 	/**

+	 * convenience method for {@link #log(Level, String, Throwable)} with

+	 * {@link Level#FATAL}.

+	 *

+	 * @param value

+	 *            the value

+	 *

+	 * @param messageCreator

+	 *            the message creator

+	 * @param t

+	 *            the Exception

+	 * @return the value passed in

+	 * @since 3.0.0

+	 */

+	default <T> @Nullable T  fatal(@Nullable T value, @NonNull Function<@Nullable T, @NonNull String> messageCreator,

+			@NonNull Throwable t) {

+		if (isEnabled(Level.FATAL)) {

+			fatal(messageCreator.apply(value), t);

+		}

+

+		return value;

+	}

+

+	/**

 	 * convenience method for {@link #logf(Level, String, Object...)} with

 	 * {@link Level#TRACE}.

 	 *

@@ -617,25 +914,29 @@
 		/**

 		 * Trace: Use this log level when you want to track things line by line

 		 */

-		TRACE, /**

-				 * Debug: Use this log level to help developers debug your

-				 * application

-				 */

-		DEBUG, /**

-				 * Info: Use this log level for normal log statements like

-				 * (request received, ...)

-				 */

-		INFO, /**

-				 * Warning: Use this log level for problems like informing about

-				 * a resource pool is getting low, ...

-				 */

-		WARNING, /**

-					 * Error: Use this log level if something goes wrong e.g. an

-					 * SQL-Query could not be executed, ...

-					 */

-		ERROR, /**

-				 * Fatal: Use this log level in case of a sever error

-				 */

+		TRACE,

+		/**

+		 * Debug: Use this log level to help developers debug your application

+		 */

+		DEBUG,

+		/**

+		 * Info: Use this log level for normal log statements like (request

+		 * received, ...)

+		 */

+		INFO,

+		/**

+		 * Warning: Use this log level for problems like informing about a

+		 * resource pool is getting low, ...

+		 */

+		WARNING,

+		/**

+		 * Error: Use this log level if something goes wrong e.g. an SQL-Query

+		 * could not be executed, ...

+		 */

+		ERROR,

+		/**

+		 * Fatal: Use this log level in case of a sever error

+		 */

 		FATAL

 	}

 }
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/.gitignore b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/.gitignore
new file mode 100644
index 0000000..9bb88d3
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/.gitignore
@@ -0,0 +1 @@
+/.DS_Store
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/ValidatedPropertyBase.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/ValidatedPropertyBase.java
index 30b6fed..3857f4b 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/ValidatedPropertyBase.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/property/ValidatedPropertyBase.java
@@ -164,7 +164,9 @@
 	}
 
 	private void _runValidation() {
-		Map<String, Object> map = Optional.ofNullable(this.dependencyMap).map(m -> m.entrySet().stream().collect(Collectors.toMap(e -> (String) e.getKey(), e -> (Object) e.getValue().get()))).orElse(new HashMap<>());
+		Map<String, Object> map = Optional.ofNullable(this.dependencyMap)
+				.<Map<String,Object>>map(m -> m.entrySet().stream().collect(Collectors.toMap(Entry::getKey, e -> (Object) e.getValue().get())))
+				.orElse(new HashMap<>());
 		this.validationStatusList.setAll(this.validationList.stream().map(f -> f.apply(this.bindProperty().getValue(), map)).collect(Collectors.toList()));
 		this.status.setValue(this.validationStatusList.stream().sorted(STATUS_SORTER).filter(WARNING_ERROR).findFirst().orElse(Status.ok()));
 		this.validationScheduled.set(false);
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultContent.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultContent.java
new file mode 100644
index 0000000..56b6dd5
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultContent.java
@@ -0,0 +1,984 @@
+/*******************************************************************************

+ * Copyright (c) 2000, 2011 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.core.text;

+

+import java.util.Vector;

+

+public class DefaultContent implements TextContent {

+	static class Compatibility {

+		public static int pow2(int n) {

+			if (n >= 1 && n <= 30)

+				return 2 << (n - 1);

+			else if (n != 0) {

+				throw new IllegalArgumentException();

+			}

+			return 1;

+		}

+	}

+

+	static class SWT {

+		public static final char CR = '\r';

+		public static final char LF = '\n';

+	}

+

+	private final static String LineDelimiter = System.getProperty("line.separator"); //$NON-NLS-1$

+

+	Vector<TextChangeListener> textListeners = new Vector<>(); // stores text

+																// listeners for

+																// event sending

+	char[] textStore = new char[0]; // stores the actual text

+	int gapStart = -1; // the character position start of the gap

+	int gapEnd = -1; // the character position after the end of the gap

+	int gapLine = -1; // the line on which the gap exists, the gap will always

+						// be associated with one line

+	int highWatermark = 300;

+	int lowWatermark = 50;

+

+	int[][] lines = new int[50][2]; // array of character positions and lengths

+									// representing the lines of text

+	int lineCount = 0; // the number of lines of text

+	int expandExp = 1; // the expansion exponent, used to increase the lines

+						// array exponentially

+	int replaceExpandExp = 1; // the expansion exponent, used to increase the

+								// lines array exponentially

+

+	/**

+	 * Creates a new DefaultContent and initializes it. A

+	 * <code>StyledTextContent</> will always have

+	 * at least one empty line.

+	 */

+	public DefaultContent() {

+		super();

+		setText(""); //$NON-NLS-1$

+	}

+

+	/**

+	 * Adds a line to the end of the line indexes array. Increases the size of

+	 * the array if necessary. <code>lineCount</code> is updated to reflect the

+	 * new entry.

+	 * <p>

+	 *

+	 * @param start

+	 *            the start of the line

+	 * @param length

+	 *            the length of the line

+	 */

+	void addLineIndex(int start, int length) {

+		int size = this.lines.length;

+		if (this.lineCount == size) {

+			// expand the lines by powers of 2

+			int[][] newLines = new int[size + Compatibility.pow2(this.expandExp)][2];

+			System.arraycopy(this.lines, 0, newLines, 0, size);

+			this.lines = newLines;

+			this.expandExp++;

+		}

+		int[] range = new int[] { start, length };

+		this.lines[this.lineCount] = range;

+		this.lineCount++;

+	}

+

+	/**

+	 * Adds a line index to the end of <code>linesArray</code>. Increases the

+	 * size of the array if necessary and returns a new array.

+	 * <p>

+	 *

+	 * @param start

+	 *            the start of the line

+	 * @param length

+	 *            the length of the line

+	 * @param linesArray

+	 *            the array to which to add the line index

+	 * @param count

+	 *            the position at which to add the line

+	 * @return a new array of line indexes

+	 */

+	int[][] addLineIndex(int start, int length, int[][] linesArray, int count) {

+		int size = linesArray.length;

+		int[][] newLines = linesArray;

+		if (count == size) {

+			newLines = new int[size + Compatibility.pow2(this.replaceExpandExp)][2];

+			this.replaceExpandExp++;

+			System.arraycopy(linesArray, 0, newLines, 0, size);

+		}

+		int[] range = new int[] { start, length };

+		newLines[count] = range;

+		return newLines;

+	}

+

+	@Override

+	public void addTextChangeListener(TextChangeListener listener) {

+		if (listener == null)

+			throw new IllegalArgumentException();

+

+		this.textListeners.addElement(listener);

+	}

+

+	/**

+	 * Adjusts the gap to accommodate a text change that is occurring.

+	 * <p>

+	 *

+	 * @param position

+	 *            the position at which a change is occurring

+	 * @param sizeHint

+	 *            the size of the change

+	 * @param line

+	 *            the line where the gap will go

+	 */

+	void adjustGap(int position, int sizeHint, int line) {

+		if (position == this.gapStart) {

+			// text is being inserted at the gap position

+			int size = (this.gapEnd - this.gapStart) - sizeHint;

+			if (this.lowWatermark <= size && size <= this.highWatermark)

+				return;

+		} else if ((position + sizeHint == this.gapStart) && (sizeHint < 0)) {

+			// text is being deleted at the gap position

+			int size = (this.gapEnd - this.gapStart) - sizeHint;

+			if (this.lowWatermark <= size && size <= this.highWatermark)

+				return;

+		}

+		moveAndResizeGap(position, sizeHint, line);

+	}

+

+	/**

+	 * Calculates the indexes of each line in the text store. Assumes no gap

+	 * exists. Optimized to do less checking.

+	 */

+	void indexLines() {

+		int start = 0;

+		this.lineCount = 0;

+		int textLength = this.textStore.length;

+		int i;

+		for (i = start; i < textLength; i++) {

+			char ch = this.textStore[i];

+			if (ch == SWT.CR) {

+				// see if the next character is a LF

+				if (i + 1 < textLength) {

+					ch = this.textStore[i + 1];

+					if (ch == SWT.LF) {

+						i++;

+					}

+				}

+				addLineIndex(start, i - start + 1);

+				start = i + 1;

+			} else if (ch == SWT.LF) {

+				addLineIndex(start, i - start + 1);

+				start = i + 1;

+			}

+		}

+		addLineIndex(start, i - start);

+	}

+

+	/**

+	 * Returns whether or not the given character is a line delimiter. Both CR

+	 * and LF are valid line delimiters.

+	 * <p>

+	 *

+	 * @param ch

+	 *            the character to test

+	 * @return true if ch is a delimiter, false otherwise

+	 */

+	static boolean isDelimiter(char ch) {

+		if (ch == SWT.CR)

+			return true;

+		if (ch == SWT.LF)

+			return true;

+		return false;

+	}

+

+	/**

+	 * Determine whether or not the replace operation is valid. DefaultContent

+	 * will not allow the /r/n line delimiter to be split or partially deleted.

+	 * <p>

+	 *

+	 * @param start

+	 *            start offset of text to replace

+	 * @param replaceLength

+	 *            start offset of text to replace

+	 * @param newText

+	 *            start offset of text to replace

+	 * @return a boolean specifying whether or not the replace operation is

+	 *         valid

+	 */

+	protected boolean isValidReplace(int start, int replaceLength, String newText) {

+		if (replaceLength == 0) {

+			// inserting text, see if the \r\n line delimiter is being split

+			if (start == 0)

+				return true;

+			if (start == getCharCount())

+				return true;

+			char before = getTextRange(start - 1, 1).charAt(0);

+			if (before == '\r') {

+				char after = getTextRange(start, 1).charAt(0);

+				if (after == '\n')

+					return false;

+			}

+		} else {

+			// deleting text, see if part of a \r\n line delimiter is being

+			// deleted

+			char startChar = getTextRange(start, 1).charAt(0);

+			if (startChar == '\n') {

+				// see if char before delete position is \r

+				if (start != 0) {

+					char before = getTextRange(start - 1, 1).charAt(0);

+					if (before == '\r')

+						return false;

+				}

+			}

+			char endChar = getTextRange(start + replaceLength - 1, 1).charAt(0);

+			if (endChar == '\r') {

+				// see if char after delete position is \n

+				if (start + replaceLength != getCharCount()) {

+					char after = getTextRange(start + replaceLength, 1).charAt(0);

+					if (after == '\n')

+						return false;

+				}

+			}

+		}

+		return true;

+	}

+

+	/**

+	 * Calculates the indexes of each line of text in the given range.

+	 * <p>

+	 *

+	 * @param offset

+	 *            the logical start offset of the text lineate

+	 * @param length

+	 *            the length of the text to lineate, includes gap

+	 * @param numLines

+	 *            the number of lines to initially allocate for the line index

+	 *            array, passed in for efficiency (the exact number of lines may

+	 *            be known)

+	 * @return a line indexes array where each line is identified by a start

+	 *         offset and a length

+	 */

+	int[][] indexLines(int offset, int length, int numLines) {

+		int[][] indexedLines = new int[numLines][2];

+		int start = 0;

+		int lineCount = 0;

+		int i;

+		this.replaceExpandExp = 1;

+		for (i = start; i < length; i++) {

+			int location = i + offset;

+			if ((location >= this.gapStart) && (location < this.gapEnd)) {

+				// ignore the gap

+			} else {

+				char ch = this.textStore[location];

+				if (ch == SWT.CR) {

+					// see if the next character is a LF

+					if (location + 1 < this.textStore.length) {

+						ch = this.textStore[location + 1];

+						if (ch == SWT.LF) {

+							i++;

+						}

+					}

+					indexedLines = addLineIndex(start, i - start + 1, indexedLines, lineCount);

+					lineCount++;

+					start = i + 1;

+				} else if (ch == SWT.LF) {

+					indexedLines = addLineIndex(start, i - start + 1, indexedLines, lineCount);

+					lineCount++;

+					start = i + 1;

+				}

+			}

+		}

+		int[][] newLines = new int[lineCount + 1][2];

+		System.arraycopy(indexedLines, 0, newLines, 0, lineCount);

+		int[] range = new int[] { start, i - start };

+		newLines[lineCount] = range;

+		return newLines;

+	}

+

+	/**

+	 * Inserts text.

+	 * <p>

+	 *

+	 * @param position

+	 *            the position at which to insert the text

+	 * @param text

+	 *            the text to insert

+	 */

+	void insert(int position, String text) {

+		if (text.length() == 0)

+			return;

+

+		int startLine = getLineAtOffset(position);

+		int change = text.length();

+		boolean endInsert = position == getCharCount();

+		adjustGap(position, change, startLine);

+

+		// during an insert the gap will be adjusted to start at

+		// position and it will be associated with startline, the

+		// inserted text will be placed in the gap

+		int startLineOffset = getOffsetAtLine(startLine);

+		// at this point, startLineLength will include the start line

+		// and all of the newly inserted text

+		int startLineLength = getPhysicalLine(startLine).length();

+

+		if (change > 0) {

+			// shrink gap

+			this.gapStart += (change);

+			for (int i = 0; i < text.length(); i++) {

+				this.textStore[position + i] = text.charAt(i);

+			}

+		}

+

+		// figure out the number of new lines that have been inserted

+		int[][] newLines = indexLines(startLineOffset, startLineLength, 10);

+		// only insert an empty line if it is the last line in the text

+		int numNewLines = newLines.length - 1;

+		if (newLines[numNewLines][1] == 0) {

+			// last inserted line is a new line

+			if (endInsert) {

+				// insert happening at end of the text, leave numNewLines as

+				// is since the last new line will not be concatenated with

+				// another

+				// line

+				numNewLines += 1;

+			} else {

+				numNewLines -= 1;

+			}

+		}

+

+		// make room for the new lines

+		expandLinesBy(numNewLines);

+		// shift down the lines after the replace line

+		for (int i = this.lineCount - 1; i > startLine; i--) {

+			this.lines[i + numNewLines] = this.lines[i];

+		}

+		// insert the new lines

+		for (int i = 0; i < numNewLines; i++) {

+			newLines[i][0] += startLineOffset;

+			this.lines[startLine + i] = newLines[i];

+		}

+		// update the last inserted line

+		if (numNewLines < newLines.length) {

+			newLines[numNewLines][0] += startLineOffset;

+			this.lines[startLine + numNewLines] = newLines[numNewLines];

+		}

+

+		this.lineCount += numNewLines;

+		this.gapLine = getLineAtPhysicalOffset(this.gapStart);

+	}

+

+	/**

+	 * Moves the gap and adjusts its size in anticipation of a text change. The

+	 * gap is resized to actual size + the specified size and moved to the given

+	 * position.

+	 * <p>

+	 *

+	 * @param position

+	 *            the position at which a change is occurring

+	 * @param size

+	 *            the size of the change

+	 * @param newGapLine

+	 *            the line where the gap should be put

+	 */

+	void moveAndResizeGap(int position, int size, int newGapLine) {

+		char[] content = null;

+		int oldSize = this.gapEnd - this.gapStart;

+		int newSize;

+		if (size > 0) {

+			newSize = this.highWatermark + size;

+		} else {

+			newSize = this.lowWatermark - size;

+		}

+		// remove the old gap from the lines information

+		if (gapExists()) {

+			// adjust the line length

+			this.lines[this.gapLine][1] = this.lines[this.gapLine][1] - oldSize;

+			// adjust the offsets of the lines after the gapLine

+			for (int i = this.gapLine + 1; i < this.lineCount; i++) {

+				this.lines[i][0] = this.lines[i][0] - oldSize;

+			}

+		}

+

+		if (newSize < 0) {

+			if (oldSize > 0) {

+				// removing the gap

+				content = new char[this.textStore.length - oldSize];

+				System.arraycopy(this.textStore, 0, content, 0, this.gapStart);

+				System.arraycopy(this.textStore, this.gapEnd, content, this.gapStart, content.length - this.gapStart);

+				this.textStore = content;

+			}

+			this.gapStart = this.gapEnd = position;

+			return;

+		}

+		content = new char[this.textStore.length + (newSize - oldSize)];

+		int newGapStart = position;

+		int newGapEnd = newGapStart + newSize;

+		if (oldSize == 0) {

+			System.arraycopy(this.textStore, 0, content, 0, newGapStart);

+			System.arraycopy(this.textStore, newGapStart, content, newGapEnd, content.length - newGapEnd);

+		} else if (newGapStart < this.gapStart) {

+			int delta = this.gapStart - newGapStart;

+			System.arraycopy(this.textStore, 0, content, 0, newGapStart);

+			System.arraycopy(this.textStore, newGapStart, content, newGapEnd, delta);

+			System.arraycopy(this.textStore, this.gapEnd, content, newGapEnd + delta, this.textStore.length - this.gapEnd);

+		} else {

+			int delta = newGapStart - this.gapStart;

+			System.arraycopy(this.textStore, 0, content, 0, this.gapStart);

+			System.arraycopy(this.textStore, this.gapEnd, content, this.gapStart, delta);

+			System.arraycopy(this.textStore, this.gapEnd + delta, content, newGapEnd, content.length - newGapEnd);

+		}

+		this.textStore = content;

+		this.gapStart = newGapStart;

+		this.gapEnd = newGapEnd;

+

+		// add the new gap to the lines information

+		if (gapExists()) {

+			this.gapLine = newGapLine;

+			// adjust the line length

+			int gapLength = this.gapEnd - this.gapStart;

+			this.lines[this.gapLine][1] = this.lines[this.gapLine][1] + (gapLength);

+			// adjust the offsets of the lines after the gapLine

+			for (int i = this.gapLine + 1; i < this.lineCount; i++) {

+				this.lines[i][0] = this.lines[i][0] + gapLength;

+			}

+		}

+	}

+

+	/**

+	 * Returns the number of lines that are in the specified text.

+	 * <p>

+	 *

+	 * @param startOffset

+	 *            the start of the text to lineate

+	 * @param length

+	 *            the length of the text to lineate

+	 * @return number of lines

+	 */

+	int lineCount(int startOffset, int length) {

+		if (length == 0) {

+			return 0;

+		}

+		int lineCount = 0;

+		int count = 0;

+		int i = startOffset;

+		if (i >= this.gapStart) {

+			i += this.gapEnd - this.gapStart;

+		}

+		while (count < length) {

+			if ((i >= this.gapStart) && (i < this.gapEnd)) {

+				// ignore the gap

+			} else {

+				char ch = this.textStore[i];

+				if (ch == SWT.CR) {

+					// see if the next character is a LF

+					if (i + 1 < this.textStore.length) {

+						ch = this.textStore[i + 1];

+						if (ch == SWT.LF) {

+							i++;

+							count++;

+						}

+					}

+					lineCount++;

+				} else if (ch == SWT.LF) {

+					lineCount++;

+				}

+				count++;

+			}

+			i++;

+		}

+		return lineCount;

+	}

+

+	/**

+	 * Returns the number of lines that are in the specified text.

+	 * <p>

+	 *

+	 * @param text

+	 *            the text to lineate

+	 * @return number of lines in the text

+	 */

+	static int lineCount(String text) {

+		int lineCount = 0;

+		int length = text.length();

+		for (int i = 0; i < length; i++) {

+			char ch = text.charAt(i);

+			if (ch == SWT.CR) {

+				if (i + 1 < length && text.charAt(i + 1) == SWT.LF) {

+					i++;

+				}

+				lineCount++;

+			} else if (ch == SWT.LF) {

+				lineCount++;

+			}

+		}

+		return lineCount;

+	}

+

+	/**

+	 * @return the logical length of the text store

+	 */

+	@Override

+	public int getCharCount() {

+		int length = this.gapEnd - this.gapStart;

+		return (this.textStore.length - length);

+	}

+

+	/**

+	 * Returns the line at <code>index</code> without delimiters.

+	 * <p>

+	 *

+	 * @param index

+	 *            the index of the line to return

+	 * @return the logical line text (i.e., without the gap)

+	 * @exception IllegalArgumentException

+	 *                <ul>

+	 *                <li>ERROR_INVALID_ARGUMENT when index is out of range</li>

+	 *                </ul>

+	 */

+	@SuppressWarnings("null")

+	@Override

+	public String getLine(int index) {

+		if ((index >= this.lineCount) || (index < 0))

+			throw new IllegalArgumentException();

+		int start = this.lines[index][0];

+		int length = this.lines[index][1];

+		int end = start + length - 1;

+		if (!gapExists() || (end < this.gapStart) || (start >= this.gapEnd)) {

+			// line is before or after the gap

+			while ((length - 1 >= 0) && isDelimiter(this.textStore[start + length - 1])) {

+				length--;

+			}

+			return new String(this.textStore, start, length);

+		} else {

+			// gap is in the specified range, strip out the gap

+			StringBuffer buf = new StringBuffer();

+			int gapLength = this.gapEnd - this.gapStart;

+			buf.append(this.textStore, start, this.gapStart - start);

+			buf.append(this.textStore, this.gapEnd, length - gapLength - (this.gapStart - start));

+			length = buf.length();

+			while ((length - 1 >= 0) && isDelimiter(buf.charAt(length - 1))) {

+				length--;

+			}

+			return buf.toString().substring(0, length);

+		}

+	}

+

+	/**

+	 * Returns the line delimiter that should be used by the StyledText widget

+	 * when inserting new lines. This delimiter may be different than the

+	 * delimiter that is used by the <code>StyledTextContent</code> interface.

+	 * <p>

+	 *

+	 * @return the platform line delimiter as specified in the line.separator

+	 *         system property.

+	 */

+	public static String getLineDelimiter() {

+		return LineDelimiter;

+	}

+

+	/**

+	 * Returns the line at the given index with delimiters.

+	 * <p>

+	 *

+	 * @param index

+	 *            the index of the line to return

+	 * @return the logical line text (i.e., without the gap) with delimiters

+	 */

+	String getFullLine(int index) {

+		int start = this.lines[index][0];

+		int length = this.lines[index][1];

+		int end = start + length - 1;

+		if (!gapExists() || (end < this.gapStart) || (start >= this.gapEnd)) {

+			// line is before or after the gap

+			return new String(this.textStore, start, length);

+		} else {

+			// gap is in the specified range, strip out the gap

+			StringBuffer buffer = new StringBuffer();

+			int gapLength = this.gapEnd - this.gapStart;

+			buffer.append(this.textStore, start, this.gapStart - start);

+			buffer.append(this.textStore, this.gapEnd, length - gapLength - (this.gapStart - start));

+			return buffer.toString();

+		}

+	}

+

+	/**

+	 * Returns the physical line at the given index (i.e., with delimiters and

+	 * the gap).

+	 * <p>

+	 *

+	 * @param index

+	 *            the line index

+	 * @return the physical line

+	 */

+	String getPhysicalLine(int index) {

+		int start = this.lines[index][0];

+		int length = this.lines[index][1];

+		return getPhysicalText(start, length);

+	}

+

+	/**

+	 * @return the number of lines in the text store

+	 */

+	@Override

+	public int getLineCount() {

+		return this.lineCount;

+	}

+

+	/**

+	 * Returns the line at the given offset.

+	 * <p>

+	 *

+	 * @param charPosition

+	 *            logical character offset (i.e., does not include gap)

+	 * @return the line index

+	 * @exception IllegalArgumentException

+	 *                <ul>

+	 *                <li>ERROR_INVALID_ARGUMENT when charPosition is out of

+	 *                range</li>

+	 *                </ul>

+	 */

+	@Override

+	public int getLineAtOffset(int charPosition) {

+		if ((charPosition > getCharCount()) || (charPosition < 0))

+			throw new IllegalArgumentException();

+		int position;

+		if (charPosition < this.gapStart) {

+			// position is before the gap

+			position = charPosition;

+		} else {

+			// position includes the gap

+			position = charPosition + (this.gapEnd - this.gapStart);

+		}

+

+		// if last line and the line is not empty you can ask for

+		// a position that doesn't exist (the one to the right of the

+		// last character) - for inserting

+		if (this.lineCount > 0) {

+			int lastLine = this.lineCount - 1;

+			if (position == this.lines[lastLine][0] + this.lines[lastLine][1])

+				return lastLine;

+		}

+

+		int high = this.lineCount;

+		int low = -1;

+		int index = this.lineCount;

+		while (high - low > 1) {

+			index = (high + low) / 2;

+			int lineStart = this.lines[index][0];

+			int lineEnd = lineStart + this.lines[index][1] - 1;

+			if (position <= lineStart) {

+				high = index;

+			} else if (position <= lineEnd) {

+				high = index;

+				break;

+			} else {

+				low = index;

+			}

+		}

+		return high;

+	}

+

+	/**

+	 * Returns the line index at the given physical offset.

+	 * <p>

+	 *

+	 * @param position

+	 *            physical character offset (i.e., includes gap)

+	 * @return the line index

+	 */

+	int getLineAtPhysicalOffset(int position) {

+		int high = this.lineCount;

+		int low = -1;

+		int index = this.lineCount;

+		while (high - low > 1) {

+			index = (high + low) / 2;

+			int lineStart = this.lines[index][0];

+			int lineEnd = lineStart + this.lines[index][1] - 1;

+			if (position <= lineStart) {

+				high = index;

+			} else if (position <= lineEnd) {

+				high = index;

+				break;

+			} else {

+				low = index;

+			}

+		}

+		return high;

+	}

+

+	/**

+	 * Returns the logical offset of the given line.

+	 * <p>

+	 *

+	 * @param lineIndex

+	 *            index of line

+	 * @return the logical starting offset of the line. When there are not any

+	 *         lines, getOffsetAtLine(0) is a valid call that should answer 0.

+	 * @exception IllegalArgumentException

+	 *                <ul>

+	 *                <li>ERROR_INVALID_ARGUMENT when lineIndex is out of range

+	 *                </li>

+	 *                </ul>

+	 */

+	@Override

+	public int getOffsetAtLine(int lineIndex) {

+		if (lineIndex == 0)

+			return 0;

+		if ((lineIndex >= this.lineCount) || (lineIndex < 0))

+			throw new IllegalArgumentException();

+		int start = this.lines[lineIndex][0];

+		if (start > this.gapEnd) {

+			return start - (this.gapEnd - this.gapStart);

+		} else {

+			return start;

+		}

+	}

+

+	/**

+	 * Increases the line indexes array to accommodate more lines.

+	 * <p>

+	 *

+	 * @param numLines

+	 *            the number to increase the array by

+	 */

+	void expandLinesBy(int numLines) {

+		int size = this.lines.length;

+		if (size - this.lineCount >= numLines) {

+			return;

+		}

+		int[][] newLines = new int[size + Math.max(10, numLines)][2];

+		System.arraycopy(this.lines, 0, newLines, 0, size);

+		this.lines = newLines;

+	}

+

+	// /**

+	// * Reports an SWT error.

+	// * <p>

+	// *

+	// * @param code the error code

+	// */

+	// void error (int code) {

+	// SWT.error(code);

+	// }

+	/**

+	 * Returns whether or not a gap exists in the text store.

+	 * <p>

+	 *

+	 * @return true if gap exists, false otherwise

+	 */

+	boolean gapExists() {

+		return this.gapStart != this.gapEnd;

+	}

+

+	/**

+	 * Returns a string representing the continuous content of the text store.

+	 * <p>

+	 *

+	 * @param start

+	 *            the physical start offset of the text to return

+	 * @param length

+	 *            the physical length of the text to return

+	 * @return the text

+	 */

+	String getPhysicalText(int start, int length) {

+		return new String(this.textStore, start, length);

+	}

+

+	/**

+	 * Returns a string representing the logical content of the text store

+	 * (i.e., gap stripped out).

+	 * <p>

+	 *

+	 * @param start

+	 *            the logical start offset of the text to return

+	 * @param length

+	 *            the logical length of the text to return

+	 * @return the text

+	 */

+	@SuppressWarnings("null")

+	@Override

+	public String getTextRange(int start, int length) {

+		if (this.textStore == null)

+			return ""; //$NON-NLS-1$

+		if (length == 0)

+			return ""; //$NON-NLS-1$

+		int end = start + length;

+		if (!gapExists() || (end < this.gapStart))

+			return new String(this.textStore, start, length);

+		if (this.gapStart < start) {

+			int gapLength = this.gapEnd - this.gapStart;

+			return new String(this.textStore, start + gapLength, length);

+		}

+		StringBuffer buf = new StringBuffer();

+		buf.append(this.textStore, start, this.gapStart - start);

+		buf.append(this.textStore, this.gapEnd, end - this.gapStart);

+		return buf.toString();

+	}

+

+	/**

+	 * Removes the specified <code>TextChangeListener</code>.

+	 * <p>

+	 *

+	 * @param listener

+	 *            the listener which should no longer be notified

+	 *

+	 * @exception IllegalArgumentException

+	 *                <ul>

+	 *                <li>ERROR_NULL_ARGUMENT when listener is null</li>

+	 *                </ul>

+	 */

+	@Override

+	public void removeTextChangeListener(TextChangeListener listener) {

+		if (listener == null) {

+			throw new IllegalArgumentException();

+		}

+

+		this.textListeners.remove(listener);

+	}

+

+	/**

+	 * Replaces the text with <code>newText</code> starting at position

+	 * <code>start</code> for a length of <code>replaceLength</code>. Notifies

+	 * the appropriate listeners.

+	 * <p>

+	 *

+	 * When sending the TextChangingEvent, <code>newLineCount</code> is the

+	 * number of lines that are going to be inserted and

+	 * <code>replaceLineCount</code> is the number of lines that are going to be

+	 * deleted, based on the change that occurs visually. For example:

+	 * <ul>

+	 * <li>(replaceText,newText) ==> (replaceLineCount,newLineCount)

+	 * <li>("","\n") ==> (0,1)

+	 * <li>("\n\n","a") ==> (2,0)

+	 * </ul>

+	 * </p>

+	 *

+	 * @param start

+	 *            start offset of text to replace

+	 * @param replaceLength

+	 *            start offset of text to replace

+	 * @param newText

+	 *            start offset of text to replace

+	 *

+	 */

+	@Override

+	public void replaceTextRange(int start, int replaceLength, String newText) {

+		// check for invalid replace operations

+		if (!isValidReplace(start, replaceLength, newText))

+			throw new IllegalArgumentException();

+

+		// inform listeners

+		TextChangingEvent event = TextChangingEvent.textChanging(this, start, replaceLength, lineCount(start, replaceLength), newText, newText.length(), lineCount(newText));

+		for (TextChangeListener l : this.textListeners) {

+			l.textChanging(event);

+		}

+

+		// first delete the text to be replaced

+		delete(start, replaceLength, event.replaceLineCount + 1);

+		// then insert the new text

+		insert(start, newText);

+		// inform listeners

+		TextChangedEvent textChanged = TextChangedEvent.textChanged(this, start, replaceLength, newText);

+

+		for (TextChangeListener l : this.textListeners) {

+			l.textChanged(textChanged);

+		}

+	}

+

+	/**

+	 * Sets the content to text and removes the gap since there are no sensible

+	 * predictions about where the next change will occur.

+	 * <p>

+	 *

+	 * @param text

+	 *            the text

+	 */

+	@Override

+	public void setText(String text) {

+		this.textStore = text.toCharArray();

+		this.gapStart = -1;

+		this.gapEnd = -1;

+		this.expandExp = 1;

+		indexLines();

+

+		TextChangedEvent textSet = TextChangedEvent.textSet(this);

+

+		for (TextChangeListener l : this.textListeners) {

+			l.textSet(textSet);

+		}

+	}

+

+	/**

+	 * Deletes text.

+	 * <p>

+	 *

+	 * @param position

+	 *            the position at which the text to delete starts

+	 * @param length

+	 *            the length of the text to delete

+	 * @param numLines

+	 *            the number of lines that are being deleted

+	 */

+	void delete(int position, int length, int numLines) {

+		if (length == 0)

+			return;

+

+		int startLine = getLineAtOffset(position);

+		int startLineOffset = getOffsetAtLine(startLine);

+		int endLine = getLineAtOffset(position + length);

+

+		String endText = ""; //$NON-NLS-1$

+		boolean splittingDelimiter = false;

+		if (position + length < getCharCount()) {

+			endText = getTextRange(position + length - 1, 2);

+			if ((endText.charAt(0) == SWT.CR) && (endText.charAt(1) == SWT.LF)) {

+				splittingDelimiter = true;

+			}

+		}

+

+		adjustGap(position + length, -length, startLine);

+		int[][] oldLines = indexLines(position, length + (this.gapEnd - this.gapStart), numLines);

+

+		// enlarge the gap - the gap can be enlarged either to the

+		// right or left

+		if (position + length == this.gapStart) {

+			this.gapStart -= length;

+		} else {

+			this.gapEnd += length;

+		}

+

+		// figure out the length of the new concatenated line, do so by

+		// finding the first line delimiter after position

+		int j = position;

+		boolean eol = false;

+		while (j < this.textStore.length && !eol) {

+			if (j < this.gapStart || j >= this.gapEnd) {

+				char ch = this.textStore[j];

+				if (isDelimiter(ch)) {

+					if (j + 1 < this.textStore.length) {

+						if (ch == SWT.CR && (this.textStore[j + 1] == SWT.LF)) {

+							j++;

+						}

+					}

+					eol = true;

+				}

+			}

+			j++;

+		}

+		// update the line where the deletion started

+		this.lines[startLine][1] = (position - startLineOffset) + (j - position);

+		// figure out the number of lines that have been deleted

+		int numOldLines = oldLines.length - 1;

+		if (splittingDelimiter)

+			numOldLines -= 1;

+		// shift up the lines after the last deleted line, no need to update

+		// the offset or length of the lines

+		for (int i = endLine + 1; i < this.lineCount; i++) {

+			this.lines[i - numOldLines] = this.lines[i];

+		}

+		this.lineCount -= numOldLines;

+		this.gapLine = getLineAtPhysicalOffset(this.gapStart);

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultTextEditActions.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultTextEditActions.java
index 6d5ac51..c933a0d 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultTextEditActions.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/DefaultTextEditActions.java
@@ -10,197 +10,207 @@
 	/**

 	 * Action to delete previous word

 	 */

-	DELETE_WORD_PREVIOUS,

+	DELETE_WORD_PREVIOUS(true),

 	/**

 	 * Action to delete next word

 	 */

-	DELETE_WORD_NEXT,

+	DELETE_WORD_NEXT(true),

 

 	// NAVIGATION

 	/**

 	 * Action to go to the next word

 	 */

-	WORD_NEXT,

+	WORD_NEXT(false),

 	/**

 	 * Action to go to the previous word

 	 */

-	WORD_PREVIOUS,

+	WORD_PREVIOUS(false),

 	/**

 	 * Action to go to the line start

 	 */

-	LINE_START,

+	LINE_START(false),

 	/**

 	 * Action to go to the line end

 	 */

-	LINE_END,

+	LINE_END(false),

 	/**

 	 * Action to go the start of the text

 	 */

-	TEXT_START,

+	TEXT_START(false),

 	/**

 	 * Action to go the end of the text

 	 */

-	TEXT_END,

+	TEXT_END(false),

 	/**

 	 * Action to go one page down

 	 */

-	TEXT_PAGE_DOWN,

+	TEXT_PAGE_DOWN(false),

 	/**

 	 * Action to go one page up

 	 */

-	TEXT_PAGE_UP,

+	TEXT_PAGE_UP(false),

 

 	// SELECT

 	/**

 	 * Action to select the next word

 	 */

-	SELECT_WORD_NEXT,

+	SELECT_WORD_NEXT(false),

 	/**

 	 * Action to select the previous word

 	 */

-	SELECT_WORD_PREVIOUS,

+	SELECT_WORD_PREVIOUS(false),

 	/**

 	 * Action to select the word at the current caret position

 	 */

-	SELECT_WORD,

+	SELECT_WORD(false),

 	/**

 	 * Action to select the line at the current caret position

 	 */

-	SELECT_LINE,

+	SELECT_LINE(false),

 	/**

 	 * Action to select until the start of the line

 	 */

-	SELECT_LINE_START,

+	SELECT_LINE_START(false),

 	/**

 	 * Action to select until the end of the line

 	 */

-	SELECT_LINE_END,

+	SELECT_LINE_END(false),

 	/**

 	 * Action to select to the start of the text

 	 */

-	SELECT_TEXT_START,

+	SELECT_TEXT_START(false),

 	/**

 	 * Action to select to the end of the text

 	 */

-	SELECT_TEXT_END,

+	SELECT_TEXT_END(false),

 	/**

 	 * Action to select a page down

 	 */

-	SELECT_TEXT_PAGE_DOWN,

+	SELECT_TEXT_PAGE_DOWN(false),

 	/**

 	 * Action to select a page up

 	 */

-	SELECT_TEXT_PAGE_UP,

+	SELECT_TEXT_PAGE_UP(false),

 

 	// Editing

 	/**

 	 * Action to create a new line

 	 */

-	NEW_LINE,

+	NEW_LINE(true),

 

 	/**

 	 * Action to indent current line

 	 */

-	INDENT,

+	INDENT(true),

 

 	/**

 	 * opposite operation of {@link #INDENT}

 	 */

-	OUTDENT,

+	OUTDENT(true),

 

 	/**

 	 * Action to select all

 	 */

-	SELECT_ALL,

+	SELECT_ALL(false),

 

 	/**

 	 * Action to move lines up

 	 */

-	MOVE_LINES_UP,

+	MOVE_LINES_UP(true),

 	/**

 	 * Action to move lines down

 	 */

-	MOVE_LINES_DOWN,

+	MOVE_LINES_DOWN(true),

 	/**

 	 * Action to cut

 	 */

-	CUT,

+	CUT(true),

 	/**

 	 * Action to copy

 	 */

-	COPY,

+	COPY(false),

 	/**

 	 * Action to paste

 	 */

-	PASTE,

+	PASTE(true),

 

 	/**

 	 * Action to delete

 	 */

-	DELETE,

+	DELETE(true),

 

 	/**

 	 * Action to delete previous

 	 */

-	DELETE_PREVIOUS,

+	DELETE_PREVIOUS(true),

 

 	/**

 	 * Action to delete line

 	 */

-	DELETE_LINE,

+	DELETE_LINE(true),

 

 	/**

 	 * scroll up while keeping the caret

 	 */

-	SCROLL_LINE_UP,

+	SCROLL_LINE_UP(false),

 	/**

 	 * scroll down while keeping the caret

 	 */

-	SCROLL_LINE_DOWN,

+	SCROLL_LINE_DOWN(false),

 

 	/**

 	 * navigate to line

 	 */

-	NAVIGATE_TO_LINE,

+	NAVIGATE_TO_LINE(false),

 

 	/**

 	 * move caret up

 	 */

-	MOVE_UP,

+	MOVE_UP(false),

 

 	/**

 	 * move caret down

 	 */

-	MOVE_DOWN,

+	MOVE_DOWN(false),

 

 	/**

 	 * move caret left

 	 */

-	MOVE_LEFT,

+	MOVE_LEFT(false),

 

 	/**

 	 * move caret right

 	 */

-	MOVE_RIGHT,

+	MOVE_RIGHT(false),

 

 	/**

 	 * move caret up while selecting

 	 */

-	SELECT_UP,

+	SELECT_UP(false),

 

 	/**

 	 * move caret down while selecting

 	 */

-	SELECT_DOWN,

+	SELECT_DOWN(false),

 

 	/**

 	 * move caret left while selecting

 	 */

-	SELECT_LEFT,

+	SELECT_LEFT(false),

 

 	/**

 	 * move caret right while selecting

 	 */

-	SELECT_RIGHT

+	SELECT_RIGHT(false);

 

+	private boolean modification;

+

+	private DefaultTextEditActions(boolean modification) {

+		this.modification = modification;

+	}

+

+	@Override

+	public boolean isModification() {

+		return this.modification;

+	}

 }

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/SourceTextEditActions.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/SourceTextEditActions.java
index 604ff6d..83a4b6c 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/SourceTextEditActions.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/SourceTextEditActions.java
@@ -11,18 +11,30 @@
 	/**
 	 * Action triggered on autocomplete
 	 */
-	PROPOSAL_REQUEST,
+	PROPOSAL_REQUEST(true),
 
 	/**
 	 * Action to increase font zoom
 	 */
-	FONT_ZOOM_IN,
+	FONT_ZOOM_IN(false),
 	/**
 	 * Action to decrease font zoom
 	 */
-	FONT_ZOOM_OUT,
+	FONT_ZOOM_OUT(false),
 	/**
 	 * Action to reset font zoom
 	 */
-	FONT_ZOOM_RESET
-}
+	FONT_ZOOM_RESET(false);
+
+
+	private boolean modification;
+
+	private SourceTextEditActions(boolean modification) {
+		this.modification = modification;
+	}
+
+	@Override
+	public boolean isModification() {
+		return this.modification;
+	}
+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangedEvent.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangedEvent.java
new file mode 100644
index 0000000..b02ceea
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangedEvent.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2014 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.text;
+
+/**
+ * Event sent when text has changed
+ *
+ * <b>This is an experimental component provided as a preview we'll improve and
+ * fix problems in up coming releases</b>
+ * </p>
+ *
+ * @noreference
+ */
+public class TextChangedEvent {
+
+	/**
+	 * The source
+	 */
+	public final TextContent source;
+
+	/**
+	 * The offset
+	 */
+	public final int offset;
+	/**
+	 * The number of replaced chars
+	 */
+	public final int replaceCharCount;
+	/**
+	 * The number of replaced lines
+	 */
+	public final int replaceLineCount;
+	/**
+	 * The new text
+	 */
+	public final String newText;
+	/**
+	 * The new char count
+	 */
+	public final int newCharCount;
+	/**
+	 * The new line count
+	 */
+	public final int newLineCount;
+
+	private TextChangedEvent(TextContent source, int offset, int replaceCharCount, int replaceLineCount, String newText, int newCharCount, int newLineCount) {
+		this.source = source;
+		this.offset = offset;
+		this.replaceCharCount = replaceCharCount;
+		this.replaceLineCount = replaceLineCount;
+		this.newText = newText;
+		this.newCharCount = newCharCount;
+		this.newLineCount = newLineCount;
+	}
+
+	/**
+	 * Create a text changed event
+	 *
+	 * @param source
+	 *            the source
+	 * @return the event
+	 */
+	public static TextChangedEvent textChanged(TextContent source) {
+		return new TextChangedEvent(source, 0, 0, 0, null, 0, 0);
+	}
+
+	/**
+	 * Create a text changed event
+	 *
+	 * @param source
+	 *            the source
+	 * @param offset
+	 *            the offset
+	 * @param replaceLength
+	 *            the replacement length
+	 * @param newText
+	 *            the new text
+	 * @return the event
+	 * @since 2.3.0
+	 */
+	public static TextChangedEvent textChanged(TextContent source, int offset, int replaceLength, String newText) {
+		return new TextChangedEvent(source, offset, replaceLength, -1, newText, newText.length(), -1);
+	}
+
+	/**
+	 * Create the text set event
+	 *
+	 * @param source
+	 *            the source
+	 * @return the event
+	 */
+	public static TextChangedEvent textSet(TextContent source) {
+		return new TextChangedEvent(source, 0, 0, 0, null, 0, 0);
+	}
+
+	@Override
+	public String toString() {
+		return "TextChangedEvent(offset=" + this.offset + ", replaceCharCount=" + this.replaceCharCount + ", replaceText=" + (this.newText == null ? "null" : "\"" + this.newText + "\"") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangingEvent.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangingEvent.java
new file mode 100644
index 0000000..ae7adde
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextChangingEvent.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2014 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.core.text;
+
+/**
+ * Event informing about text changing
+ *
+ * <b>This is an experimental component provided as a preview we'll improve and
+ * fix problems in up coming releases</b>
+ * </p>
+ * @noreference
+ */
+public class TextChangingEvent {
+
+	/**
+	 * The source
+	 */
+	public final TextContent source;
+
+	/**
+	 * The offset
+	 */
+	public int offset;
+	/**
+	 * The number of replaced chars
+	 */
+	public int replaceCharCount;
+	/**
+	 * The number of replaced lines
+	 */
+	public final int replaceLineCount;
+	/**
+	 * The new text
+	 */
+	public final String newText;
+	/**
+	 * The new char count
+	 */
+	public final int newCharCount;
+	/**
+	 * The new line count
+	 */
+	public final int newLineCount;
+
+	private TextChangingEvent(TextContent source, int offset, int replaceCharCount, int replaceLineCount, String newText, int newCharCount, int newLineCount) {
+		this.source = source;
+		this.offset = offset;
+		this.replaceCharCount = replaceCharCount;
+		this.replaceLineCount = replaceLineCount;
+		this.newText = newText;
+		this.newCharCount = newCharCount;
+		this.newLineCount = newLineCount;
+	}
+
+	/**
+	 * Create a new event
+	 *
+	 * @param source
+	 *            the source
+	 * @param offset
+	 *            the offset
+	 * @param replaceCharCount
+	 *            the number of replaced chars
+	 * @param replaceLineCount
+	 *            the number of replaced lines
+	 * @param newText
+	 *            the new text
+	 * @param newCharCount
+	 *            the new char count
+	 * @param newLineCount
+	 *            the new line count
+	 * @return the event
+	 */
+	public static TextChangingEvent textChanging(TextContent source, int offset, int replaceCharCount, int replaceLineCount, String newText, int newCharCount, int newLineCount) {
+		return new TextChangingEvent(source, offset, replaceCharCount, replaceLineCount, newText, newCharCount, newLineCount);
+	}
+
+	@Override
+	public String toString() {
+		return "TextChangingEvent(offset="+this.offset+", replaceCharCount="+this.replaceCharCount+", replaceText=" + (this.newText == null ? "null" : "\""+this.newText+"\"") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextContent.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextContent.java
new file mode 100644
index 0000000..4ec7ba5
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextContent.java
@@ -0,0 +1,118 @@
+package org.eclipse.fx.core.text;

+

+import org.eclipse.jdt.annotation.NonNull;

+

+public interface TextContent {

+	/**

+	 * Get the content of the line with the given index

+	 *

+	 * @param index

+	 *            the index

+	 * @return the line content

+	 */

+	public @NonNull String getLine(int index);

+

+	/**

+	 * Get the content for the given range

+	 *

+	 * @param start

+	 *            the start

+	 * @param length

+	 *            the length

+	 * @return the content

+	 */

+	public @NonNull String getTextRange(int start, int length);

+

+	/**

+	 * Set a new text content

+	 *

+	 * @param text

+	 *            the text

+	 */

+	public void setText(@NonNull String text);

+

+	/**

+	 * @return number of chars

+	 */

+	public int getCharCount();

+

+	/**

+	 * @return number of lines

+	 */

+	public int getLineCount();

+

+	/**

+	 * Get the offset of the line

+	 *

+	 * @param lineIndex

+	 *            the line index

+	 * @return the offset

+	 */

+	public int getOffsetAtLine(int lineIndex);

+

+	/**

+	 * Get the line index for the char

+	 *

+	 * @param charPosition

+	 *            the char position

+	 * @return the line index

+	 */

+	public int getLineAtOffset(int charPosition);

+

+	/**

+	 * Replace the content in range

+	 *

+	 * @param start

+	 *            the start

+	 * @param replaceLength

+	 *            the replaced length

+	 * @param newText

+	 *            the new text

+	 */

+	public void replaceTextRange(int start, int replaceLength, @NonNull String newText);

+

+	/**

+	 * Attach a change listener

+	 *

+	 * @param listener

+	 *            the listener

+	 */

+	public void addTextChangeListener(TextChangeListener listener);

+

+	/**

+	 * Remove a change listener

+	 *

+	 * @param listener

+	 *            the listener

+	 */

+	public void removeTextChangeListener(TextChangeListener listener);

+

+	/**

+	 * Listener informed above modifications

+	 */

+	public interface TextChangeListener {

+		/**

+		 * Called after the text has changed

+		 *

+		 * @param event

+		 *            the event

+		 */

+		public void textChanged(TextChangedEvent event);

+

+		/**

+		 * Called after the text has been set

+		 *

+		 * @param event

+		 *            the event

+		 */

+		public void textSet(TextChangedEvent event);

+

+		/**

+		 * Called when the text is changing

+		 *

+		 * @param event

+		 *            the event

+		 */

+		public void textChanging(TextChangingEvent event);

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextEditAction.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextEditAction.java
index 0391900..53fe25b 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextEditAction.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextEditAction.java
@@ -11,4 +11,11 @@
 	public final static TextEditAction NOOP = new TextEditAction() {
 		// empty
 	};
+
+	/**
+	 * @return true if the action modifies the text
+	 */
+	public default boolean isModification() {
+		return false;
+	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextUtil.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextUtil.java
index 509467f..7dab1be 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextUtil.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/text/TextUtil.java
@@ -17,6 +17,7 @@
 import java.text.MessageFormat;
 import java.text.StringCharacterIterator;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.function.IntConsumer;
@@ -28,6 +29,8 @@
 import org.apache.commons.lang.text.StrLookup;
 import org.apache.commons.lang.text.StrSubstitutor;
 import org.eclipse.fx.core.IntTuple;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 
 /**
  * Utility methods to deal with texts
@@ -256,6 +259,36 @@
 		return content;
 	}
 
+	/**
+	 * Make use the value is not null
+	 *
+	 * @param value
+	 *            the nullable value
+	 * @param defaultValue
+	 *            the default if the value is null
+	 * @return a nonnull string
+	 * @since 2.0
+	 */
+	public static @NonNull String notNull(@Nullable String value, @NonNull String defaultValue) {
+		return value == null ? defaultValue : value;
+	}
+
+	/**
+	 * Create a string of the same char
+	 *
+	 * @param c
+	 *            the character
+	 * @param length
+	 *            the length
+	 * @return the created string
+	 * @since 2.4.0
+	 */
+	public static String createRepeatedString(char c, int length) {
+		char[] vals = new char[length];
+		Arrays.fill(vals, ' ');
+		return String.valueOf(vals);
+	}
+
 	static class StrLookupImpl extends StrLookup {
 		private final Map<String, Object> data;
 
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.emf.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.emf.databinding/META-INF/MANIFEST.MF
index 4238db5..09610be 100755
--- a/bundles/runtime/org.eclipse.fx.emf.databinding/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMF Databinding for JavaFX
 Bundle-SymbolicName: org.eclipse.fx.emf.databinding
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.osgi.framework;version="1.3.0"
 Require-Bundle: org.eclipse.emf.edit;bundle-version="2.7.0",
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.emf.databinding.edit;version="2.6.0"
+Export-Package: org.eclipse.fx.emf.databinding;version="3.0.0"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/pom.xml b/bundles/runtime/org.eclipse.fx.emf.databinding/pom.xml
index b52adc2..45a5f05 100755
--- a/bundles/runtime/org.eclipse.fx.emf.databinding/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EFXObject.java b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EFXObject.java
new file mode 100644
index 0000000..447c4b7
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EFXObject.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.databinding;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.StringProperty;
+
+/**
+ * Base interface for an adapted eobject
+ *
+ * @param <O>
+ *            the owner type
+ */
+public interface EFXObject<O extends EObject> {
+	/**
+	 * Get an {@link ObjectProperty}
+	 *
+	 * @param type
+	 *            the type
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the property
+	 * @throws IllegalArgumentException
+	 *             if the feature describes a primitive value like int.class,
+	 *             boolean.class
+	 */
+	public <T> ObjectProperty<T> getObjectProperty(Class<T> type, EStructuralFeature feature);
+
+	/**
+	 * Get an integer property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the integer property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an int.class type
+	 */
+	public IntegerProperty getIntegerProperty(EStructuralFeature feature);
+
+	/**
+	 * Get a double property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the double property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an double.class type
+	 */
+	public DoubleProperty getDoubleProperty(EStructuralFeature feature);
+
+	/**
+	 * Get a string property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the string property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an String.class type
+	 */
+	public StringProperty getStringProperty(EStructuralFeature feature);
+
+	/**
+	 * Get a float property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the float property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an float.class type
+	 */
+	public FloatProperty getFloatProperty(EStructuralFeature feature);
+
+	/**
+	 * Get a boolean property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the boolean property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an boolean.class type
+	 */
+	public BooleanProperty getBooleanProperty(EStructuralFeature feature);
+
+	/**
+	 * Get a long property
+	 *
+	 * @param feature
+	 *            the feature
+	 * @return the long property
+	 * @throws IllegalArgumentException
+	 *             if the feature does not describe an long.class type
+	 */
+	public LongProperty getLongProperty(EStructuralFeature feature);
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EObjectAdaterFactory.java b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EObjectAdaterFactory.java
new file mode 100644
index 0000000..537658f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EObjectAdaterFactory.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.databinding;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.emf.databinding.internal.AdaptedEObject;
+import org.eclipse.jdt.annotation.NonNull;
+
+/**
+ * Factory to create an adapter instance to create observables
+ *
+ * @since 3.0
+ */
+public class EObjectAdaterFactory {
+
+	/**
+	 * Adapt the object
+	 *
+	 * @param ed
+	 *            the optional editing domain
+	 * @param eObject
+	 *            the emf object
+	 * @return the adapted object
+	 */
+	public static <@NonNull O extends EObject> EFXObject<O> adapt(EditingDomain ed, O eObject) {
+		return new AdaptedEObject<O>(ed, eObject);
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EProperty.java b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EProperty.java
new file mode 100644
index 0000000..853bdec
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/EProperty.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.databinding;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import javafx.beans.property.Property;
+
+/**
+ * EMF Property
+ *
+ * @param <O>
+ *            the owner type
+ * @param <T>
+ *            the value type
+ */
+public interface EProperty<O extends EObject, T> extends Property<T> {
+	@Override
+	O getBean();
+
+	/**
+	 * @return the emf feature represented by the property
+	 */
+	EStructuralFeature getFeature();
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/edit/EMFEditFXProperties.java b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/edit/EMFEditFXProperties.java
deleted file mode 100755
index 69af14d..0000000
--- a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/edit/EMFEditFXProperties.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**

- *  Copyright (c) 2012 TESIS DYNAware GmbH and others. 

- *  All rights reserved. This program and the accompanying materials 

- *  are made available under the terms of the Eclipse Public License v1.0 

- *  which accompanies this distribution, and is available at 

- *  http://www.eclipse.org/legal/epl-v10.html 

- *  

- *  Contributors: 

- *      Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation

- */

-package org.eclipse.fx.emf.databinding.edit;

-

-import javafx.beans.property.ObjectPropertyBase;

-import javafx.beans.property.Property;

-

-import org.eclipse.emf.common.command.Command;

-import org.eclipse.emf.common.notify.Notification;

-import org.eclipse.emf.common.notify.impl.AdapterImpl;

-import org.eclipse.emf.ecore.EObject;

-import org.eclipse.emf.ecore.EStructuralFeature;

-import org.eclipse.emf.edit.command.SetCommand;

-import org.eclipse.emf.edit.domain.EditingDomain;

-import org.eclipse.jdt.annotation.NonNull;

-

-/**

- * Factory to create FX-Properties backed by an {@link EObject}s {@link EStructuralFeature}

- */

-public class EMFEditFXProperties {

-

-	/**

-	 * Returns a {@link Property} for the given {@link EStructuralFeature}

-	 * 

-	 * @param editingDomain

-	 *            the editing domain

-	 * @param eObject

-	 *            the object

-	 * @param feature

-	 *            the feature instance the property is created for

-	 * @param <T> the property type

-	 * @return a value property for the given {@link EStructuralFeature}

-	 */

-	public static <T> Property<T> value(@NonNull EditingDomain editingDomain, @NonNull EObject eObject, @NonNull EStructuralFeature feature) {

-		return new EObjectProperty<>(editingDomain, eObject, feature);

-	}

-

-	// public static <T> ObservableList<T> list(EditingDomain editingDomain, Notifier owner, EList<T> list) {

-	// throw new UnsupportedOperationException("Not implemented");

-	// }

-	//

-	// public static <T> ObservableList<T> list(EditingDomain editingDomain, EObject eObject,

-	// EStructuralFeature feature) {

-	// throw new UnsupportedOperationException("Not implemented");

-	// }

-	//

-	// static class EObjectObservableList<T> extends ListPropertyBase<T> {

-	//

-	// EObject eObject;

-	// EStructuralFeature feature;

-	// EditingDomain editingDomain;

-	//

-	// public Object getBean() {

-	// return eObject;

-	// }

-	//

-	// public String getName() {

-	// return feature.getName();

-	// }

-	//

-	// //FIXME Java8

-	// // Default methods NOT YET supported by JDT-Core

-	// // @Override

-	// public void forEach(Consumer<? super T> action) {

-	// super.forEach(action);

-	// }

-	//

-	// // @Override

-	// public Spliterator<T> spliterator() {

-	// return super.spliterator();

-	// }

-	//

-	// }

-

-	static class EObjectProperty<T> extends ObjectPropertyBase<T> {

-		@NonNull

-		private final EObject eObject;

-		@NonNull

-		private final EStructuralFeature feature;

-		@NonNull

-		private final EditingDomain editingDomain;

-

-		public EObjectProperty(@NonNull EditingDomain editingDomain, @NonNull EObject eObject, @NonNull EStructuralFeature feature) {

-			super();

-			this.eObject = eObject;

-			this.feature = feature;

-			this.editingDomain = editingDomain;

-

-			eObject.eAdapters().add(new AdapterImpl() {

-				@Override

-				public void notifyChanged(Notification msg) {

-					fireValueChangedEvent();

-				}

-			});

-		}

-		

-		@Override

-		protected void fireValueChangedEvent() {

-			super.fireValueChangedEvent();

-		}

-

-		@Override

-		public void setValue(T newValue) {

-			Command command = SetCommand.create(this.editingDomain, this.eObject, this.feature, newValue);

-			if (command.canExecute())

-				this.editingDomain.getCommandStack().execute(command);

-		}

-

-		@Override

-		@SuppressWarnings("unchecked")

-		public T getValue() {

-			return (T) this.eObject.eGet(this.feature);

-		}

-

-		@Override

-		public Object getBean() {

-			return this.eObject;

-		}

-

-		@Override

-		public String getName() {

-			return this.feature.getName();

-		}

-

-	}

-

-}

diff --git a/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/internal/AdaptedEObject.java b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/internal/AdaptedEObject.java
new file mode 100644
index 0000000..5baddac
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.databinding/src/org/eclipse/fx/emf/databinding/internal/AdaptedEObject.java
@@ -0,0 +1,543 @@
+/*******************************************************************************
+ * Copyright (c) 2016 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.databinding.internal;
+
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.emf.databinding.EFXObject;
+import org.eclipse.fx.emf.databinding.EProperty;
+import org.eclipse.jdt.annotation.NonNull;
+
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleFloatProperty;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.SimpleLongProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+
+@SuppressWarnings("javadoc")
+public class AdaptedEObject<@NonNull O extends EObject> implements EFXObject<O> {
+	final Map<EStructuralFeature, Property<?>> map = new HashMap<>();
+	final O eo;
+	private final EditingDomain ed;
+	private Adapter adapter;
+
+	public AdaptedEObject(EditingDomain ed, O eo) {
+		this.eo = eo;
+		this.ed = ed;
+		this.adapter = new MyInnerAdapter(this);
+		this.eo.eAdapters().add(this.adapter);
+	}
+
+	static class MyInnerAdapter extends AdapterImpl {
+		private WeakReference<AdaptedEObject<?>> eo;
+
+		public MyInnerAdapter(AdaptedEObject<?> eo) {
+			this.eo = new WeakReference<AdaptedEObject<?>>(eo);
+		}
+
+		@Override
+		public void notifyChanged(Notification msg) {
+			super.notifyChanged(msg);
+			AdaptedEObject<?> eo = this.eo.get();
+			if( eo == null ) {
+				if( msg.getEventType() != Notification.REMOVING_ADAPTER ) {
+					((EObject)msg.getNotifier()).eAdapters().remove(this);
+				}
+			} else {
+				Property<Object> property = (Property<Object>) eo.map.get(msg.getFeature());
+				if( property != null && ! property.isBound() ) {
+					//TODO could avoid boxing
+					property.setValue(msg.getNewValue());
+				}
+			}
+		}
+
+		@Override
+		public void setTarget(Notifier newTarget) {
+			super.setTarget(newTarget);
+		}
+	}
+
+	@Override
+	public BooleanProperty getBooleanProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == boolean.class) {
+			return (BooleanProperty) this.map.computeIfAbsent(feature, f -> new BooleanPropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not boolean.class"); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public DoubleProperty getDoubleProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == double.class) {
+			return (DoubleProperty) this.map.computeIfAbsent(feature, f -> new DoublePropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not double.class"); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public FloatProperty getFloatProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == float.class) {
+			return (FloatProperty) this.map.computeIfAbsent(feature, f -> new FloatPropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not float.class"); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public IntegerProperty getIntegerProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == int.class) {
+			return (IntegerProperty) this.map.computeIfAbsent(feature, f -> new IntegerPropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not float.class"); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public LongProperty getLongProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == long.class) {
+			return (LongProperty) this.map.computeIfAbsent(feature, f -> new LongPropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not float.class"); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public <T> ObjectProperty<T> getObjectProperty(Class<T> type, EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+
+		if( feature instanceof EReference ) {
+			return (ObjectProperty<T>) map.computeIfAbsent(feature, f -> new ObjectPropertyImpl<>(this, f, ed));
+		} else {
+			Class<?> t = feature.getEType().getInstanceClass();
+			if( t == String.class
+					|| t == int.class
+					|| t == long.class
+					|| t == double.class
+					|| t == float.class
+					|| t == boolean.class) {
+				throw new IllegalArgumentException("Feature holds a primitive value");
+			} else {
+				return new ObjectPropertyImpl<>(this, feature, this.ed);
+			}
+		}
+	}
+
+	@Override
+	public StringProperty getStringProperty(EStructuralFeature feature) {
+		if( feature.isMany() ) {
+			throw new IllegalArgumentException("Feature is multi valued"); //$NON-NLS-1$
+		}
+		if(feature.getEType().getInstanceClass() == String.class) {
+			return (StringProperty) this.map.computeIfAbsent(feature, f -> new StringPropertyImpl<>(this, f, this.ed));
+		} else {
+			throw new IllegalAccessError("The feature type is not String.class"); //$NON-NLS-1$
+		}
+	}
+
+	static class ObjectPropertyImpl<@NonNull O extends EObject, V> extends SimpleObjectProperty<V> implements EProperty<O, V> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public ObjectPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((V) this.adapter.eo.eGet(this.f)));
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((V) this.adapter.eo.eGet(this.f)));
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			V value = get();
+			if( this.adapter.eo.eGet(this.f) != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, value);
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, value);
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class BooleanPropertyImpl<@NonNull O extends EObject> extends SimpleBooleanProperty implements EProperty<O, Boolean> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public BooleanPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((Boolean) this.adapter.eo.eGet(this.f)).booleanValue());
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((Boolean) this.adapter.eo.eGet(this.f)).booleanValue());
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			boolean value = get();
+			if( ((Boolean) this.adapter.eo.eGet(this.f)).booleanValue() != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, Boolean.valueOf(value));
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, Boolean.valueOf(value));
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class FloatPropertyImpl<@NonNull O extends EObject> extends SimpleFloatProperty implements EProperty<O, Number> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public FloatPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((Float) this.adapter.eo.eGet(this.f)).floatValue());
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((Float) this.adapter.eo.eGet(this.f)).floatValue());
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			float value = get();
+			if( ((Float) this.adapter.eo.eGet(this.f)).floatValue() != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, Float.valueOf(value));
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, Float.valueOf(value));
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class LongPropertyImpl<@NonNull O extends EObject> extends SimpleLongProperty implements EProperty<O, Number> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public LongPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((Long) this.adapter.eo.eGet(this.f)).longValue());
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((Long) this.adapter.eo.eGet(this.f)).longValue());
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			long value = get();
+			if( ((Long) this.adapter.eo.eGet(this.f)).longValue() != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, Long.valueOf(value));
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, Long.valueOf(value));
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class IntegerPropertyImpl<@NonNull O extends EObject> extends SimpleIntegerProperty implements EProperty<O, Number> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public IntegerPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((Integer) this.adapter.eo.eGet(this.f)).intValue());
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((Integer) this.adapter.eo.eGet(this.f)).intValue());
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			int value = get();
+			if( ((Integer) this.adapter.eo.eGet(this.f)).intValue() != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, Integer.valueOf(value));
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, Integer.valueOf(value));
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class DoublePropertyImpl<@NonNull O extends EObject> extends SimpleDoubleProperty implements EProperty<O, Number> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public DoublePropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set(((Double) this.adapter.eo.eGet(this.f)).doubleValue());
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set(((Double) this.adapter.eo.eGet(this.f)).doubleValue());
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			double value = get();
+			if( ((Double) this.adapter.eo.eGet(this.f)).doubleValue() != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, Double.valueOf(value));
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f,  Double.valueOf(value));
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+
+	static class StringPropertyImpl<@NonNull O extends EObject> extends SimpleStringProperty implements EProperty<O, String> {
+		private final AdaptedEObject<O> adapter;
+		private final EStructuralFeature f;
+		private final EditingDomain ed;
+
+		public StringPropertyImpl(AdaptedEObject<O> adapter, EStructuralFeature f, EditingDomain ed) {
+			this.adapter = adapter;
+			this.f = f;
+			this.ed = ed;
+			set((String) adapter.eo.eGet(f));
+		}
+
+		@Override
+		public O getBean() {
+			return this.adapter.eo;
+		}
+
+		@Override
+		public EStructuralFeature getFeature() {
+			return this.f;
+		}
+
+		@Override
+		public String getName() {
+			return this.f.getName();
+		}
+
+		@Override
+		public void unbind() {
+			super.unbind();
+			set((String) this.adapter.eo.eGet(this.f));
+		}
+
+		@Override
+		protected void invalidated() {
+			super.invalidated();
+
+			String value = get();
+			if( this.adapter.eo.eGet(this.f) != value ) {
+				if( this.ed == null ) {
+					this.adapter.eo.eSet(this.f, value);
+				} else {
+					Command command = SetCommand.create(this.ed, this.adapter.eo, this.f, value);
+					if( command.canExecute() ) {
+						this.ed.getCommandStack().execute(command);
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.emf.edit.ui/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.emf.edit.ui/META-INF/MANIFEST.MF
index d71a523..27c36b8 100755
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: EMF Edit UI for JavaFX

 Bundle-SymbolicName: org.eclipse.fx.emf.edit.ui

-Bundle-Version: 2.6.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Require-Bundle: org.eclipse.emf.edit;bundle-version="2.7.0",

  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional

-Export-Package: org.eclipse.fx.emf.edit.ui;version="2.6.0",

- org.eclipse.fx.emf.edit.ui.dnd;version="2.6.0"

+Export-Package: org.eclipse.fx.emf.edit.ui;version="3.0.0",

+ org.eclipse.fx.emf.edit.ui.dnd;version="3.0.0"

 Bundle-Vendor: Eclipse.org

-Import-Package: org.eclipse.fx.core;version="2.6.0",

- org.eclipse.fx.ui.controls.tree;version="2.6.0"

+Import-Package: org.eclipse.fx.core;version="3.0.0",

+ org.eclipse.fx.ui.controls.tree;version="3.0.0"

diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/pom.xml b/bundles/runtime/org.eclipse.fx.emf.edit.ui/pom.xml
index a37d887..18f7426 100755
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.formats.svg/META-INF/MANIFEST.MF
index e923826..26cd19d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %pluginName

 Bundle-SymbolicName: org.eclipse.fx.formats.svg;singleton:=true

-Bundle-Version: 2.6.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-ClassPath: .

 Bundle-Vendor: %providerName

 Bundle-Localization: plugin

diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.ecore b/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.ecore
index e01299b..3cada88 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.ecore
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.ecore
@@ -900,6 +900,7 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="dy" eType="#//ListOfLengths"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="rotate" eType="#//ListOfNumbers"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="textLength" eType="#//Length"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="textContent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eGenericSuperTypes eClassifier="#//SvgElement"/>
     <eGenericSuperTypes eClassifier="#//GraphicsElement"/>
     <eGenericSuperTypes eClassifier="#//TextContentElement"/>
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.genmodel b/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.genmodel
index f263ec7..61f1b41 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.genmodel
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/model/svg.genmodel
@@ -1,257 +1,384 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.fx.formats.svg/src" modelPluginID="org.eclipse.fx.formats.svg"

-    modelName="Svg" importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0"

+    modelName="Svg" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0"

     copyrightFields="false">

   <foreignModel>svg.ecore</foreignModel>

   <genPackages prefix="Svg" basePackage="org.eclipse.fx.formats.svg" disposableProviderFactory="true"

       ecorePackage="svg.ecore#/">

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//alignment_baseline">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/baseline"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/before_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/text_before_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/middle"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/central"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/after_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/text_after_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/ideographic"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/alphabetic"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/hanging"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/mathematical"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//alignment_baseline/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Alignment_baseline">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/baseline"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/before_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/text_before_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/middle"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/central"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/after_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/text_after_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/ideographic"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/alphabetic"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/hanging"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/mathematical"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Alignment_baseline/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//clip_rule">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//clip_rule/nonzero"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//clip_rule/evenodd"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//clip_rule/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Clip_rule">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Clip_rule/nonzero"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Clip_rule/evenodd"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Clip_rule/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//color_interpolation">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation/sRGB"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation/linearRGB"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Color_interpolation">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation/sRGB"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation/linearRGB"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//color_interpolation_filters">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation_filters/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation_filters/sRGB"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation_filters/linearRGB"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_interpolation_filters/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Color_interpolation_filters">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation_filters/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation_filters/sRGB"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation_filters/linearRGB"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_interpolation_filters/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//color_rendering">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_rendering/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_rendering/optimizeSpeed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_rendering/optimizeQuality"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//color_rendering/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Color_rendering">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_rendering/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_rendering/optimizeSpeed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_rendering/optimizeQuality"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Color_rendering/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//direction">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//direction/ltr"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//direction/rtl"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//direction/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Direction">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Direction/ltr"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Direction/rtl"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Direction/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//display">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/inline"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/block"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/list_item"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/run_in"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/compact"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/marker"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/inline_table"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_row_group"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_header_group"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_footer_group"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_row"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_column_group"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_column"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_cell"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/table_caption"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/none"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//display/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Display">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/inline"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/block"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/list_item"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/run_in"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/compact"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/marker"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/inline_table"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_row_group"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_header_group"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_footer_group"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_row"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_column_group"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_column"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_cell"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/table_caption"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/none"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Display/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//dominant_baseline">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/use_script"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/no_change"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/reset_size"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/ideographic"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/alphabetic"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/hanging"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/mathematical"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/central"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/middle"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/text_after_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/text_before_edge"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//dominant_baseline/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Dominant_baseline">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/use_script"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/no_change"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/reset_size"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/ideographic"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/alphabetic"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/hanging"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/mathematical"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/central"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/middle"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/text_after_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/text_before_edge"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Dominant_baseline/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//fill_rule">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//fill_rule/nonzero"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//fill_rule/evenodd"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//fill_rule/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Fill_rule">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Fill_rule/nonzero"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Fill_rule/evenodd"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Fill_rule/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//font_stretch">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/normal"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/wider"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/narrower"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/ultra_condensed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/extra_condensed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/condensed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/semi_condensed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/semi_expanded"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/expanded"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/extra_expanded"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/ultra_expanded"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_stretch/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Font_stretch">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/wider"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/narrower"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/ultra_condensed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/extra_condensed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/condensed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/semi_condensed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/semi_expanded"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/expanded"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/extra_expanded"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/ultra_expanded"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_stretch/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//font_style">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_style/normal"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_style/italic"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_style/oblique"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_style/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Font_style">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_style/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_style/italic"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_style/oblique"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_style/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//font_variant">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_variant/normal"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_variant/small_caps"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_variant/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Font_variant">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_variant/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_variant/small_caps"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_variant/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//font_weight">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/normal"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/bold"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/bolder"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/lighter"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em100"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em200"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em300"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em400"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em500"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em600"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em700"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em800"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/em900"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//font_weight/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Font_weight">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/bold"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/bolder"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/lighter"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em100"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em200"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em300"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em400"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em500"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em600"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em700"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em800"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/em900"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Font_weight/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//image_rendering">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//image_rendering/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//image_rendering/optimizeSpeed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//image_rendering/optimizeQuality"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//image_rendering/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Image_rendering">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Image_rendering/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Image_rendering/optimizeSpeed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Image_rendering/optimizeQuality"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Image_rendering/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//overflow">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//overflow/visible"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//overflow/hidden"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//overflow/scroll"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//overflow/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//overflow/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Overflow">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Overflow/visible"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Overflow/hidden"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Overflow/scroll"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Overflow/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Overflow/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//pointer_events">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/visiblePainted"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/visibleFill"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/visibleStroke"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/visible"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/painted"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/fill"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/stroke"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/all"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/none"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//pointer_events/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Pointer_events">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/visiblePainted"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/visibleFill"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/visibleStroke"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/visible"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/painted"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/fill"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/stroke"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/all"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/none"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Pointer_events/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//shape_rendering">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//shape_rendering/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//shape_rendering/optimizeSpeed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//shape_rendering/crispEdges"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//shape_rendering/geometricPrecision"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//shape_rendering/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Shape_rendering">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Shape_rendering/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Shape_rendering/optimizeSpeed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Shape_rendering/crispEdges"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Shape_rendering/geometricPrecision"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Shape_rendering/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//stroke_linecap">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linecap/butt"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linecap/round"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linecap/square"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linecap/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Stroke_linecap">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linecap/butt"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linecap/round"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linecap/square"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linecap/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//stroke_linejoin">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linejoin/miter"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linejoin/round"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linejoin/bevel"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//stroke_linejoin/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Stroke_linejoin">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linejoin/miter"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linejoin/round"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linejoin/bevel"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Stroke_linejoin/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//text_anchor">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_anchor/start"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_anchor/middle"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_anchor/end"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_anchor/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Text_anchor">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_anchor/start"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_anchor/middle"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_anchor/end"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_anchor/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//text_rendering">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_rendering/auto"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_rendering/optimizeSpeed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_rendering/optimizeLegibility"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_rendering/geometricPrecision"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//text_rendering/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Text_rendering">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_rendering/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_rendering/optimizeSpeed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_rendering/optimizeLegibility"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_rendering/geometricPrecision"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Text_rendering/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//unicode_bidi">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//unicode_bidi/normal"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//unicode_bidi/embed"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//unicode_bidi/bidi_override"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//unicode_bidi/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Unicode_bidi">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Unicode_bidi/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Unicode_bidi/embed"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Unicode_bidi/bidi_override"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Unicode_bidi/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//visibility">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//visibility/visible"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//visibility/hidden"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//visibility/collapse"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//visibility/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Visibility">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Visibility/visible"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Visibility/hidden"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Visibility/collapse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Visibility/inherit"/>

     </genEnums>

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//writing_mode">

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/lr_tb"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/rl_tb"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/tb_rl"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/lr"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/rl"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/tb"/>

-      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//writing_mode/inherit"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Writing_mode">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/lr_tb"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/rl_tb"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/tb_rl"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/lr"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/rl"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/tb"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Writing_mode/inherit"/>

     </genEnums>

-    <genDataTypes ecoreDataType="svg.ecore#//length"/>

-    <genDataTypes ecoreDataType="svg.ecore#//angle"/>

-    <genDataTypes ecoreDataType="svg.ecore#//percentage"/>

-    <genDataTypes ecoreDataType="svg.ecore#//shape"/>

-    <genDataTypes ecoreDataType="svg.ecore#//funciri"/>

-    <genDataTypes ecoreDataType="svg.ecore#//color"/>

-    <genDataTypes ecoreDataType="svg.ecore#//paint"/>

-    <genDataTypes ecoreDataType="svg.ecore#//opacity_value"/>

-    <genDataTypes ecoreDataType="svg.ecore#//baseline_shift"/>

-    <genDataTypes ecoreDataType="svg.ecore#//clip"/>

-    <genDataTypes ecoreDataType="svg.ecore#//clip_path"/>

-    <genDataTypes ecoreDataType="svg.ecore#//color_profile"/>

-    <genDataTypes ecoreDataType="svg.ecore#//cursor"/>

-    <genDataTypes ecoreDataType="svg.ecore#//enable_background"/>

-    <genDataTypes ecoreDataType="svg.ecore#//fill"/>

-    <genDataTypes ecoreDataType="svg.ecore#//fill_opacity"/>

-    <genDataTypes ecoreDataType="svg.ecore#//filter"/>

-    <genDataTypes ecoreDataType="svg.ecore#//flood_color"/>

-    <genDataTypes ecoreDataType="svg.ecore#//flood_opacity"/>

-    <genDataTypes ecoreDataType="svg.ecore#//font_family"/>

-    <genDataTypes ecoreDataType="svg.ecore#//font_size"/>

-    <genDataTypes ecoreDataType="svg.ecore#//font_size_adjust"/>

-    <genDataTypes ecoreDataType="svg.ecore#//glyph_orientation_horizontal"/>

-    <genDataTypes ecoreDataType="svg.ecore#//glyph_orientation_vertical"/>

-    <genDataTypes ecoreDataType="svg.ecore#//kerning"/>

-    <genDataTypes ecoreDataType="svg.ecore#//letter_spacing"/>

-    <genDataTypes ecoreDataType="svg.ecore#//lighting_color"/>

-    <genDataTypes ecoreDataType="svg.ecore#//marker_end"/>

-    <genDataTypes ecoreDataType="svg.ecore#//marker_mid"/>

-    <genDataTypes ecoreDataType="svg.ecore#//marker_start"/>

-    <genDataTypes ecoreDataType="svg.ecore#//masks"/>

-    <genDataTypes ecoreDataType="svg.ecore#//opacity"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stop_color"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stop_opacity"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke_dasharray"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke_dashoffset"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke_miterlimit"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke_opacity"/>

-    <genDataTypes ecoreDataType="svg.ecore#//stroke_width"/>

-    <genDataTypes ecoreDataType="svg.ecore#//text_decoration"/>

-    <genDataTypes ecoreDataType="svg.ecore#//word_spacing"/>

-    <genClasses ecoreClass="svg.ecore#//ContainerElement"/>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//ZoomAndPan">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ZoomAndPan/disable"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ZoomAndPan/magnify"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//LengthAdjust">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//LengthAdjust/spacing"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//LengthAdjust/spacingAndGlyphs"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Method">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Method/align"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Method/stretch"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Spacing">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Spacing/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Spacing/exact"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//MarkerUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MarkerUnits/strokeWidth"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MarkerUnits/userSpaceOnUse"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//Rendering_intent">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Rendering_intent/auto"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Rendering_intent/perceptual"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Rendering_intent/relative_colorimetric"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Rendering_intent/saturation"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//Rendering_intent/absolute_colorimetric"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//GradientUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//GradientUnits/userSpaceOnUse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//GradientUnits/objectBoundingBox"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//SpreadMethod">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//SpreadMethod/pad"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//SpreadMethod/reflect"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//SpreadMethod/repeat"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//PatternUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//PatternUnits/userSpaceOnUse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//PatternUnits/objectBoundingBox"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//ClipPathUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ClipPathUnits/userSpaceOnUse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ClipPathUnits/objectBoundingBox"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//MaskUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MaskUnits/userSpaceOnUse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MaskUnits/objectBoundingBox"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//FilterUnits">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//FilterUnits/userSpaceOnUse"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//FilterUnits/objectBoundingBox"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//BlendMode">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//BlendMode/normal"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//BlendMode/lighten"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//BlendMode/multiply"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//BlendMode/screen"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//BlendMode/darken"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//ColorMatrixType">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ColorMatrixType/matrix"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ColorMatrixType/saturate"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ColorMatrixType/hueRotate"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ColorMatrixType/luminanceToAlpha"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//CompositeOperator">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/over"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/in"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/out"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/atop"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/xor"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//CompositeOperator/arithmetic"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//ConvolveMatrixEdgeMode">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ConvolveMatrixEdgeMode/duplicate"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ConvolveMatrixEdgeMode/wrap"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ConvolveMatrixEdgeMode/none"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//ChannelSelector">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ChannelSelector/R"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ChannelSelector/G"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ChannelSelector/B"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//ChannelSelector/A"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//MorphologyOperator">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MorphologyOperator/erode"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//MorphologyOperator/dilate"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//StitchTiles">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//StitchTiles/stitch"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//StitchTiles/noStitch"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="svg.ecore#//TurbulenceType">

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//TurbulenceType/fractalNoise"/>

+      <genEnumLiterals ecoreEnumLiteral="svg.ecore#//TurbulenceType/turbulence"/>

+    </genEnums>

+    <genDataTypes ecoreDataType="svg.ecore#//Length"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Angle"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Percentage"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Shape"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Funciri"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Color"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Paint"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Opacity_value"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Baseline_shift"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Clip"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Clip_path"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Color_profile"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Cursor"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Enable_background"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Fill"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Fill_opacity"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Filter"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Flood_color"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Flood_opacity"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Font_family"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Font_size"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Font_size_adjust"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Glyph_orientation_horizontal"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Glyph_orientation_vertical"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Kerning"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Letter_spacing"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Lighting_color"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Marker_end"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Marker_mid"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Marker_start"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Masks"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Opacity"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stop_color"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stop_opacity"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke_dasharray"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke_dashoffset"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke_miterlimit"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke_opacity"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Stroke_width"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Text_decoration"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Word_spacing"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Coordinate"/>

+    <genDataTypes ecoreDataType="svg.ecore#//ViewBox"/>

+    <genDataTypes ecoreDataType="svg.ecore#//PreserveAspectRatio"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Number"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Transform"/>

+    <genDataTypes ecoreDataType="svg.ecore#//PathData"/>

+    <genDataTypes ecoreDataType="svg.ecore#//ListOfPoints"/>

+    <genDataTypes ecoreDataType="svg.ecore#//ListOfLengths"/>

+    <genDataTypes ecoreDataType="svg.ecore#//ListOfNumbers"/>

+    <genDataTypes ecoreDataType="svg.ecore#//ListOfCoordinates"/>

+    <genDataTypes ecoreDataType="svg.ecore#//Name"/>

+    <genDataTypes ecoreDataType="svg.ecore#//NumberOptionalNumber"/>

+    <genDataTypes ecoreDataType="svg.ecore#//TransformList"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//ContentElement">

+      <genTypeParameters ecoreTypeParameter="svg.ecore#//ContentElement/T"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference svg.ecore#//ContentElement/children"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//ContainerElement">

+      <genTypeParameters ecoreTypeParameter="svg.ecore#//ContainerElement/T"/>

+    </genClasses>

     <genClasses ecoreClass="svg.ecore#//StructuralElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//SvgElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//DescriptiveElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//GraphicsElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//GraphicsReferencingElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//ShapeElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//BasicShapeElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//TextContentElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//TextContentChildElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//GradientElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//LightSourceElement"/>

+    <genClasses image="false" ecoreClass="svg.ecore#//FilterPrimitiveElement"/>

+    <genClasses ecoreClass="svg.ecore#//AnimationElement"/>

     <genClasses ecoreClass="svg.ecore#//____ENUMS____"/>

     <genClasses ecoreClass="svg.ecore#//____DATATYPES____"/>

     <genClasses ecoreClass="svg.ecore#//____ATTRIBUTES____"/>

@@ -347,5 +474,447 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//PresentationAttributes/word_spacing"/>

       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//PresentationAttributes/writing_mode"/>

     </genClasses>

+    <genClasses image="false" ecoreClass="svg.ecore#//XLinkAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__href"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__show"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__actuate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__type"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__role"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__arcrole"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//XLinkAttributes/xlink__title"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference svg.ecore#//XLinkAttributes/resolvedInstance"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="svg.ecore#//FilterPrimitiveAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/result"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//FilterPrimitiveAttributes/in"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//____ELEMENTES____"/>

+    <genClasses ecoreClass="svg.ecore#//SvgSvgElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/viewBox"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/preserveAspectRatio"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/zoomAndPan"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/version"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/baseProfile"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/contentScriptType"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/contentStyleType"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSvgElement/styleSheet"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgGElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgGElement/y"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgDefsElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDefsElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDefsElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDefsElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDefsElement/transform"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgDescElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDescElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgDescElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgTitleElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTitleElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTitleElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgSymbolElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSymbolElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSymbolElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSymbolElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSymbolElement/viewBox"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSymbolElement/preserveAspectRatio"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgUseElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgUseElement/y"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgImageElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/preserveAspectRatio"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgImageElement/height"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgSwitchElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSwitchElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSwitchElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSwitchElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgSwitchElement/transform"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgPathElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/d"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPathElement/pathLength"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgRectElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/rx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRectElement/ry"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgCircleElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/cx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/cy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgCircleElement/r"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgEllipseElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/cx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/cy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/rx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgEllipseElement/ry"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgLineElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/x1"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/y1"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/x2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLineElement/y2"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgPolylineElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolylineElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolylineElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolylineElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolylineElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolylineElement/points"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgPolygonElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolygonElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolygonElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolygonElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolygonElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPolygonElement/points"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgTextElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/lengthAdjust"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/dx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/dy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/rotate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextElement/textLength"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgTspanElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/dx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/dy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/rotate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/textLength"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/lengthAdjust"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTspanElement/textContent"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgTrefElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTrefElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTrefElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTrefElement/externalResourcesRequired"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgTextPathElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/startOffset"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/method"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgTextPathElement/spacing"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgAltGlyphElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/dx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/dy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/glyphRef"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/format"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphElement/rotate"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgAltGlyphDefElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgAltGlyphItemElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgAltGlyphRefElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/dx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/dy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/glyphRef"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgAltGlyphRefElement/format"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgMarkerElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/viewBox"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/preserveAspectRatio"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/refX"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/refY"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/markerUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/markerWidth"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/markerHeight"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMarkerElement/orient"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgColorProfileElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgColorProfileElement/local"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgColorProfileElement/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgColorProfileElement/rendering_intent"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgLinearGradientElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/x1"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/y1"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/x2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/y2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/gradientUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/spreadMethod"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgLinearGradientElement/gradientTransform"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgRadialGradientElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/cx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/cy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/r"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/fx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/fy"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/spreadMethod"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/gradientUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgRadialGradientElement/gradientTransform"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgStopElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgStopElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgStopElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgStopElement/offset"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgPatternElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/viewBox"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/preserveAspectRatio"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/patternUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/patternContentUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgPatternElement/patternTransform"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgClipPathElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgClipPathElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgClipPathElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgClipPathElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgClipPathElement/transform"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgClipPathElement/clipPathUnits"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgMaskElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/maskUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgMaskElement/maskContentUnits"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFilterElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/width"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/height"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/filterRes"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/filterUnits"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFilterElement/primitiveUnits"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeDistantLightElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDistantLightElement/azimuth"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDistantLightElement/elevation"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFePointLightElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFePointLightElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFePointLightElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFePointLightElement/z"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeSpotLightElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/x"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/y"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/z"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/pointsAtX"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/pointsAtY"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/pointsAtZ"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/specularExponent"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpotLightElement/limitingConeAngle"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeBlendElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeBlendElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeBlendElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeBlendElement/in2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeBlendElement/mode"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeColorMatrixElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeColorMatrixElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeColorMatrixElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeColorMatrixElement/type"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeColorMatrixElement/values"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeComponentTransferElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeComponentTransferElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeComponentTransferElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeFuncRElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgFeFuncGElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgFeFuncBElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgFeFuncAElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgFeCompositeElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/in2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/operator"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/k1"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/k2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/k3"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeCompositeElement/k4"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeConvolveMatrixElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/order"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/kernelMatrix"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/divisor"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/bias"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/targetX"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/targetY"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/edgeMode"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/kernelUnitLength"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeConvolveMatrixElement/preserveAlpha"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeDiffuseLightingElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDiffuseLightingElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDiffuseLightingElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDiffuseLightingElement/surfaceScale"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDiffuseLightingElement/diffuseConstant"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDiffuseLightingElement/kernelUnitLength"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeDisplacementMapElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/in2"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/scale"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/xChannelSelector"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeDisplacementMapElement/yChannelSelector"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeFloodElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeFloodElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeFloodElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeGaussianBlurElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeGaussianBlurElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeGaussianBlurElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeGaussianBlurElement/stdDeviation"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeImageElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeImageElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeImageElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeImageElement/externalResourcesRequired"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeImageElement/preserveAspectRatio"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeMergeElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMergeElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMergeElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeMergeNodeElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgFeMorphologyElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMorphologyElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMorphologyElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMorphologyElement/operator"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeMorphologyElement/radius"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeOffsetElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeOffsetElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeOffsetElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeOffsetElement/dx"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeOffsetElement/dy"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeSpecularLightingElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/surfaceScale"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/specularConstant"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/specularExponent"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeSpecularLightingElement/kernelUnitLength"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeTileElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTileElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTileElement/style"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgFeTurbulenceElement">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/class"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/style"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/baseFrequency"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/numOctaves"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/seed"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/stitchTiles"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute svg.ecore#//SvgFeTurbulenceElement/type"/>

+    </genClasses>

+    <genClasses ecoreClass="svg.ecore#//SvgAnimateElement"/>

+    <genClasses ecoreClass="svg.ecore#//SvgMetadataElement"/>

   </genPackages>

 </genmodel:GenModel>

diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/pom.xml b/bundles/runtime/org.eclipse.fx.formats.svg/pom.xml
index ba0402a..dbec109 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/FXToSvg.xtend b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/FXToSvg.xtend
new file mode 100644
index 0000000..eba21de
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/FXToSvg.xtend
@@ -0,0 +1,272 @@
+package org.eclipse.fx.formats.svg

+

+import javafx.scene.Group

+import javafx.scene.Parent

+import javafx.scene.Scene

+import javafx.scene.image.ImageView

+import javafx.scene.layout.Region

+import javafx.scene.shape.Arc

+import javafx.scene.shape.Circle

+import javafx.scene.shape.Ellipse

+import javafx.scene.shape.Line

+import javafx.scene.shape.Path

+import javafx.scene.shape.Polygon

+import javafx.scene.shape.Polyline

+import javafx.scene.shape.QuadCurve

+import javafx.scene.shape.Rectangle

+import javafx.scene.shape.SVGPath

+import javafx.scene.text.Text

+import org.eclipse.fx.formats.svg.fx.PresentationAttributesUtil

+import org.eclipse.fx.formats.svg.svg.SvgDefsElement

+import org.eclipse.fx.formats.svg.svg.SvgElement

+import org.eclipse.fx.formats.svg.svg.SvgFactory

+import org.eclipse.fx.formats.svg.svg.SvgSvgElement

+

+import static extension org.eclipse.fx.formats.svg.fx.FXToSvgUtils.*

+import org.eclipse.emf.ecore.util.EcoreUtil

+import org.eclipse.fx.formats.svg.svg.SvgGElement

+

+class FXToSvg {

+	SvgSvgElement root;

+	SvgDefsElement defs;

+

+	Scene s;

+	Parent p;

+

+	extension PresentationAttributesUtil e = new PresentationAttributesUtil([ getDefs ]);

+

+	new(Scene s) {

+		this.s = s;

+	}

+

+	new(Parent p) {

+		this.p = p;

+	}

+

+	def getDefs() {

+		if( defs == null ) {

+			defs = SvgFactory.eINSTANCE.createSvgDefsElement

+			root.children.add(0,defs);

+		}

+		return defs;

+	}

+

+	def SvgSvgElement getSvgRoot() {

+		if( root == null ) {

+			root = SvgFactory.eINSTANCE.createSvgSvgElement;

+

+			if( this.s != null ) {

+				root.width = s.width.toString

+				root.height = s.height.toString

+				if( s.fill != null ) {

+					root.applyFill(s.fill)

+				}

+				root.children += transform(this.s.root)

+			} else {

+				root = SvgFactory.eINSTANCE.createSvgSvgElement;

+				root.width = p.layoutBounds.width.toString

+				root.height = p.layoutBounds.height.toString

+				val rr = transform(this.p) as SvgGElement;

+				rr.transform = null

+				root.children += rr

+			}

+		}

+

+		return root;

+	}

+

+	def dispatch SvgElement transform(Region r) {

+		var e = SvgFactory.eINSTANCE.createSvgGElement

+		e.visibility = r.isVisible.toVisibility

+		e.transform = '''translate(«r.boundsInParent.minX»,«r.boundsInParent.minY»)'''

+		/*r.background

+		r.boundsInParent

+		r.blendMode

+		r.border

+

+		r.clip

+		r.cursor

+		r.effect

+		r.opacity

+		r.rotate*/

+

+//		val bg = SvgFactory.eINSTANCE.createSvgRectElement

+//		e.children += bg

+//

+//		bg.width = r.boundsInParent.width.toString

+//		bg.height = r.boundsInParent.height.toString

+//

+//		if( r.background == null ) {

+//			bg.fill = "transparent"

+//		} else if( r.background.fills.size == 1 ) {

+//			val bFill = r.background.fills.head

+//			if( bFill.insets.isEmpty && bFill.radii.isEmpty ) {

+//				bg.applyFill(bFill.fill)

+//			} else {

+//				bg.fill = "transparent"

+//				e.children += r.background.fills.map[ createBackgroundFill(r) ].toList

+//			}

+//		} else {

+//			bg.fill = "transparent"

+//			e.children += r.background.fills.map[ createBackgroundFill(r) ].toList

+//		}

+

+		if( r.shape != null ) {

+			//FIXME We need to use that node for background/... instead of the clip

+			val cp = SvgFactory.eINSTANCE.createSvgClipPathElement

+			cp.id = EcoreUtil.generateUUID

+			cp.children += transform(r.shape)

+			getDefs.children += cp

+			e.clip_path = '''url(#«cp.id»)'''

+

+			// Handle backgrounds

+			if( r.background != null ) {

+				e.children += r.background.fills.map[ createBackgroundFill(r) ].toList

+			}

+

+			// Handle borders

+			if( r.border != null ) {

+				e.children += r.border.createBorder(r)

+			}

+		} else {

+			// Handle backgrounds

+			if( r.background != null ) {

+				e.children += r.background.fills.map[ createBackgroundFill(r) ].toList

+			}

+

+			// Handle borders

+			if( r.border != null ) {

+				e.children += r.border.createBorder(r)

+			}

+

+		}

+

+		e.children += r.childrenUnmodifiable.filter[visible].map[ transform ].toList

+

+		if( r.clip != null ) {

+			println("Region-Clip " + r.clip)

+			val cp = SvgFactory.eINSTANCE.createSvgClipPathElement

+			cp.id = EcoreUtil.generateUUID

+			cp.children += transform(r.clip)

+			getDefs.children += cp

+			e.clip_path = '''url(#«cp.id»)'''

+		}

+

+		return e;

+	}

+

+	def dispatch SvgElement transform(Group g) {

+		var e = SvgFactory.eINSTANCE.createSvgGElement

+		e.visibility = g.isVisible.toVisibility

+

+		e.children += g.childrenUnmodifiable.filter[visible].map[ transform ].toList

+

+		if( g.clip != null ) {

+			println("Group-CLIP: " + g.clip)

+			val cp = SvgFactory.eINSTANCE.createSvgClipPathElement

+			cp.id = EcoreUtil.generateUUID

+			cp.children += transform(g.clip)

+			getDefs.children += cp

+			e.clip_path = '''url(#«cp.id»)'''

+		}

+

+		return e

+	}

+

+	def dispatch SvgElement transform(ImageView v) {

+		var e = SvgFactory.eINSTANCE.createSvgImageElement

+		e.visibility = v.isVisible.toVisibility

+		return e;

+	}

+

+	def dispatch SvgElement transform(Arc a) {

+		var e = a.createPath

+		e.visibility = a.isVisible.toVisibility

+		e.applyFill(a.fill)

+		return e;

+	}

+

+	def dispatch SvgElement transform(Circle c) {

+		print("Circle arc")

+		return null;

+	}

+

+	def dispatch SvgElement transform(Ellipse e) {

+		print("Ellipse arc")

+		return null;

+	}

+

+	def dispatch SvgElement transform(Line e) {

+		print("Line arc")

+		return null;

+

+	}

+

+	def dispatch SvgElement transform(Path p) {

+		var e = p.createPath

+		e.visibility = p.isVisible.toVisibility

+		e.applyFill(p.fill)

+

+		if( p.clip != null ) {

+			println("PATH_CLIP:" + p.clip)

+			val cp = SvgFactory.eINSTANCE.createSvgClipPathElement

+			cp.id = EcoreUtil.generateUUID

+			cp.children += transform(p.clip)

+			getDefs.children += cp

+			e.clip_path = '''url(#«cp.id»)'''

+		}

+

+		return e;

+	}

+

+	def dispatch SvgElement transform(Polygon e) {

+		print("Polygon arc")

+		return null;

+

+	}

+

+	def dispatch SvgElement transform(Polyline e) {

+		print("Polyline arc")

+		return null;

+

+	}

+

+	def dispatch SvgElement transform(QuadCurve e) {

+		print("QuadCurve arc")

+		return null;

+

+	}

+

+	def dispatch SvgElement transform(Rectangle e) {

+		val r = SvgFactory.eINSTANCE.createSvgRectElement

+		r.x = e.x.toString

+		r.y = e.y.toString

+		r.width = e.width.toString

+		r.height = e.height.toString

+

+		r.visibility = e.isVisible.toVisibility

+		r.applyFill(e.fill)

+

+		return r;

+

+	}

+

+	def dispatch SvgElement transform(SVGPath e) {

+		val p = SvgFactory.eINSTANCE.createSvgPathElement

+		p.d = e.content

+		return p;

+

+	}

+

+	def dispatch SvgElement transform(Text e) {

+		val p = e.createPath

+		p.visibility = e.isVisible.toVisibility

+		p.applyFill(e.fill)

+

+		var g = SvgFactory.eINSTANCE.createSvgGElement

+		g.transform = '''translate(«e.boundsInParent.minX»,«e.boundsInParent.minY + e.baselineOffset»)'''

+		g.children += p;

+

+		return g;

+	}

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/SvgSerializer.xtend b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/SvgSerializer.xtend
new file mode 100644
index 0000000..0468988
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/SvgSerializer.xtend
@@ -0,0 +1,113 @@
+package org.eclipse.fx.formats.svg

+

+import org.eclipse.fx.formats.svg.svg.SvgSvgElement

+import java.io.Writer

+import org.eclipse.fx.formats.svg.svg.SvgGElement

+import org.eclipse.fx.formats.svg.svg.SvgDefsElement

+import org.eclipse.fx.formats.svg.svg.SvgRectElement

+import org.eclipse.fx.formats.svg.svg.SvgTextElement

+import org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement

+import org.eclipse.fx.formats.svg.svg.SvgStopElement

+import org.eclipse.fx.formats.svg.svg.SvgPathElement

+import org.eclipse.fx.formats.svg.svg.SvgImageElement

+import org.eclipse.fx.formats.svg.svg.SvgClipPathElement

+

+class SvgSerializer {

+	SvgSvgElement e;

+

+	new(SvgSvgElement e) {

+		this.e = e;

+	}

+

+	def void toSvg(Writer w) {

+		w.append(gen)

+	}

+

+	def gen() '''

+		<?xml version="1.0" standalone="no"?>

+		<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

+		<svg width="«e.width»" height="«e.height»" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

+			«FOR c : e.children»

+				«c.handle»

+			«ENDFOR»

+		</svg>

+	'''

+

+	def dispatch CharSequence handle(SvgGElement e) '''

+		<g

+			transform="«e.transform»"

+			«IF ! e.clip_path.nullOrEmpty && e.clip_path != "none"»clip-path="«e.clip_path»"«ENDIF»

+		>

+			«FOR c : e.children»

+				«handle(c)»

+			«ENDFOR»

+		</g>

+	'''

+

+	def dispatch CharSequence handle(SvgRectElement e) '''

+		<rect

+			«IF ! e.x.nullOrEmpty»x="«e.x»"«ENDIF»

+			«IF ! e.y.nullOrEmpty»y="«e.y»"«ENDIF»

+			«IF ! e.rx.nullOrEmpty»rx="«e.rx»"«ENDIF»

+			«IF ! e.ry.nullOrEmpty»ry="«e.ry»"«ENDIF»

+			width="«e.width»"

+			height="«e.height»"

+			«IF ! e.fill.nullOrEmpty»fill="«e.fill»"«ENDIF»

+			«IF ! e.fill_opacity.nullOrEmpty»fill-opacity="«e.fill_opacity»"«ENDIF»

+

+			«IF ! e.stroke.nullOrEmpty && e.stroke != "none"»stroke="«e.stroke»"«ENDIF»

+			«IF ! e.stroke_width.nullOrEmpty»stroke-width="«e.stroke_width»"«ENDIF»

+		/>

+	'''

+

+	def dispatch CharSequence handle(SvgTextElement e) '''

+		<text

+			x="«e.x»"

+			y="«e.y»"

+			fill="«e.fill»">

+			«e.textContent»

+		</text>

+	'''

+

+	def dispatch CharSequence handle(SvgDefsElement e) '''

+		<defs>

+			«FOR c : e.children»

+				«c.handle»

+			«ENDFOR»

+		</defs>

+	'''

+

+	def dispatch CharSequence handle(SvgPathElement e) '''

+		<path

+			d="«e.d»"

+			«IF ! e.fill.nullOrEmpty»fill="«e.fill»"«ENDIF»

+		/>

+	'''

+

+	def dispatch CharSequence handle(SvgImageElement e) '''

+		<image

+«««			x="«e.x»"

+«««			y="«e.y»"

+		/>

+	'''

+

+	def dispatch CharSequence handle(SvgLinearGradientElement e) '''

+		<linearGradient id="«e.id»"

+			x1="«e.x1»"

+			y1="«e.y1»"

+			x2="«e.x2»"

+			y2="«e.y2»">

+			«FOR s : e.children.filter(typeof(SvgStopElement))»

+				<stop offset="«s.offset»" stop-color="«s.stop_color»" />

+			«ENDFOR»

+		</linearGradient>

+	'''

+

+	def dispatch CharSequence handle(SvgClipPathElement e) '''

+		<clipPath id="«e.id»">

+			«FOR c : e.children»

+				«c.handle»

+			«ENDFOR»

+		</clipPath>

+	'''

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/FXToSvgUtils.xtend b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/FXToSvgUtils.xtend
new file mode 100644
index 0000000..bcf30b1
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/FXToSvgUtils.xtend
@@ -0,0 +1,78 @@
+package org.eclipse.fx.formats.svg.fx

+

+import com.sun.javafx.geom.PathIterator

+import javafx.geometry.Insets

+import javafx.scene.layout.CornerRadii

+import javafx.scene.paint.Color

+import javafx.scene.shape.Shape

+import org.eclipse.fx.formats.svg.svg.SvgFactory

+import org.eclipse.fx.formats.svg.svg.SvgPathElement

+import org.eclipse.fx.formats.svg.svg.Visibility

+

+class FXToSvgUtils {

+	def static String toRGBHex(Color c) {

+		var r = Math.round(c.red * 255.0);

+        var g = Math.round(c.green * 255.0);

+        var b = Math.round(c.blue * 255.0);

+		return String.format("#%02x%02x%02x" , r, g, b);

+	}

+

+	def static Visibility toVisibility(boolean b) {

+		if( b ) {

+			return Visibility.VISIBLE

+		} else {

+			return Visibility.HIDDEN

+		}

+	}

+

+	def static SvgPathElement createPath(Shape s) {

+		val i = s.impl_configShape.getPathIterator(null);

+		val f = newFloatArrayOfSize(6);

+		val b = new StringBuilder();

+		for( ; ! i.done; i.next ) {

+			val type = i.currentSegment(f);

+			if( type == PathIterator.SEG_LINETO ) {

+				b.append('''L «f.get(0)» «f.get(1)»''')

+			} else if( type == PathIterator.SEG_CLOSE ) {

+				b.append("z")

+			} else if( type == PathIterator.SEG_CUBICTO ) {

+				b.append('''C «f.get(0)» «f.get(1)» «f.get(2)» «f.get(3)» «f.get(4)» «f.get(5)»''')

+			} else if( type == PathIterator.SEG_MOVETO ) {

+				b.append('''M «f.get(0)» «f.get(1)»''')

+			} else if( type == PathIterator.SEG_QUADTO ) {

+				b.append('''Q «f.get(0)» «f.get(1)» «f.get(2)» «f.get(3)»''')

+			}

+		}

+

+		var p = SvgFactory.eINSTANCE.createSvgPathElement

+		p.d = b.toString

+		return p

+	}

+

+	def static String toProportion(double v) {

+		return v * 100 + "%"

+	}

+

+	def static boolean isEmpty(Insets i) {

+		if( i == null ) {

+			return true

+		} else {

+			return i.left == 0 && i.right == 0 && i.top == 0 && i.bottom == 0

+		}

+	}

+

+	def static boolean isEmpty(CornerRadii r) {

+		if( r == null ) {

+			return true;

+		} else {

+			return r.bottomLeftHorizontalRadius == 0

+					&& r.bottomLeftVerticalRadius == 0

+					&& r.bottomRightHorizontalRadius == 0

+					&& r.bottomRightVerticalRadius == 0

+					&& r.topLeftHorizontalRadius == 0

+					&& r.topLeftVerticalRadius == 0

+					&& r.topRightHorizontalRadius == 0

+					&& r.topRightVerticalRadius == 0

+		}

+	}

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/PresentationAttributesUtil.xtend b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/PresentationAttributesUtil.xtend
new file mode 100644
index 0000000..22b14ae
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/fx/PresentationAttributesUtil.xtend
@@ -0,0 +1,199 @@
+package org.eclipse.fx.formats.svg.fx

+

+import java.util.Collections

+import java.util.List

+import java.util.function.Supplier

+import javafx.scene.layout.BackgroundFill

+import javafx.scene.layout.Border

+import javafx.scene.layout.BorderStroke

+import javafx.scene.layout.CornerRadii

+import javafx.scene.layout.Region

+import javafx.scene.paint.Color

+import javafx.scene.paint.CycleMethod

+import javafx.scene.paint.ImagePattern

+import javafx.scene.paint.LinearGradient

+import javafx.scene.paint.RadialGradient

+import javafx.scene.paint.Stop

+import org.eclipse.emf.ecore.util.EcoreUtil

+import org.eclipse.fx.formats.svg.svg.PresentationAttributes

+import org.eclipse.fx.formats.svg.svg.SpreadMethod

+import org.eclipse.fx.formats.svg.svg.SvgDefsElement

+import org.eclipse.fx.formats.svg.svg.SvgElement

+import org.eclipse.fx.formats.svg.svg.SvgFactory

+import org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement

+import org.eclipse.fx.formats.svg.svg.SvgStopElement

+

+import static extension org.eclipse.fx.formats.svg.fx.FXToSvgUtils.*

+

+class PresentationAttributesUtil {

+	Supplier<SvgDefsElement> defSupplier;

+

+	new(Supplier<SvgDefsElement> defSupplier) {

+		this.defSupplier = defSupplier;

+	}

+

+	def List<SvgElement> createBorder(Border b, Region r) {

+		if( b == null ) {

+			return Collections.emptyList

+		} else {

+			return b.strokes.map[ createBorderStroke(r) ].flatten.toList

+		}

+	}

+

+	def List<SvgElement> createBorderStroke(BorderStroke s, Region r) {

+		val w = s.widths.bottom == s.widths.left

+		     && s.widths.bottom == s.widths.right

+		     && s.widths.bottom == s.widths.top

+

+		val c = s.bottomStroke == s.leftStroke

+		    && s.bottomStroke == s.rightStroke

+		    && s.bottomStroke == s.topStroke

+

+		val st = s.bottomStyle == s.leftStyle

+		    && s.bottomStyle == s.rightStyle

+		    && s.bottomStyle == s.topStyle

+

+		if( w && c && st && s.radii.checkRadii ) {

+			val rv = SvgFactory.eINSTANCE.createSvgRectElement

+			rv.fill = "transparent"

+			rv.x = (r.layoutBounds.minX + s.insets.left).toString

+			rv.y = (r.layoutBounds.minY + s.insets.top).toString

+			rv.width = (r.layoutBounds.width - s.insets.left - s.insets.right).toString

+			rv.height = (r.layoutBounds.height - s.insets.top - s.insets.bottom).toString

+			rv.stroke_width = s.widths.bottom.toString

+			rv.applyStroke(s.bottomStroke)

+			return Collections.singletonList(rv);

+		} else {

+			println("====> Dup actions")

+		}

+

+		return Collections.emptyList;

+	}

+

+	def static checkRadii(CornerRadii r) {

+		val rx = r.bottomLeftHorizontalRadius == r.bottomRightHorizontalRadius

+			&& r.bottomLeftHorizontalRadius == r.topLeftHorizontalRadius

+			&& r.bottomLeftHorizontalRadius == r.topRightHorizontalRadius

+

+		val ry = r.bottomLeftVerticalRadius == r.bottomRightVerticalRadius

+			&& r.bottomLeftVerticalRadius == r.topLeftVerticalRadius

+			&& r.bottomLeftVerticalRadius == r.topRightVerticalRadius

+

+		return rx && ry;

+	}

+

+	def SvgElement createBackgroundFill(BackgroundFill f, Region r) {

+		if( f.radii.checkRadii ) {

+			val rv = SvgFactory.eINSTANCE.createSvgRectElement

+			rv.rx = f.radii.bottomLeftHorizontalRadius.toString

+			rv.ry = f.radii.bottomLeftVerticalRadius.toString

+			rv.x = f.insets.left.toString

+			rv.y = f.insets.top.toString

+			rv.width = (r.layoutBounds.width - f.insets.left - f.insets.right).toString

+			rv.height = (r.layoutBounds.height - f.insets.top - f.insets.bottom).toString

+			rv.fill = "transparent"

+			rv.applyFill(f.fill)

+			println( r + " ===> " + rv.fill + "; " + f.fill)

+			return rv

+		} else {

+			val rv = SvgFactory.eINSTANCE.createSvgPathElement

+			return rv;

+		}

+	}

+

+//	def void applyBackground(PresentationAttributes e, Background b) {

+//		if( b ==  null ) {

+//			return

+//		}

+//

+//		//TODO What is outset for?

+//

+//		if( !b.fills.empty ) {

+//			if( b.fills.size == 1 ) {

+//				if( b.fills.head.insets.empty && b.fills.head.radii.empty ) {

+//					e.applyFill(b.fills.head.fill)

+//				}

+//			}

+//		} else if( !b.images.empty ) {

+//

+//		}

+//	}

+

+	def dispatch void applyFill(PresentationAttributes e, Color p) {

+		e.fill = p.toRGBHex

+		if( p.opacity != 1.0 ) {

+			e.fill_opacity = p.opacity.toString

+		}

+	}

+

+	def dispatch void applyFill(PresentationAttributes e, ImagePattern p) {

+		System.err.println("ImagePattern not yet supported")

+	}

+

+	def dispatch void applyFill(PresentationAttributes e, LinearGradient p) {

+		var SvgLinearGradientElement l = SvgFactory.eINSTANCE.createSvgLinearGradientElement

+		l.id = EcoreUtil.generateUUID

+		l.x1 = if (p.isProportional) { p.startX.toProportion } else { p.startX.toString }

+		l.x2 = if (p.isProportional) { p.endX.toProportion } else { p.endX.toString }

+		l.y1 = if (p.isProportional) { p.startY.toProportion } else { p.startY.toString }

+		l.y2 = if (p.isProportional) { p.endY.toProportion } else { p.endY.toString }

+		l.spreadMethod = p.cycleMethod.toSpread

+		for( Stop s : p.stops ) {

+			l.children += s.toStop

+		}

+

+		defSupplier.get.children += l;

+		e.fill = '''url(#«l.id»)'''

+	}

+

+	def dispatch void applyFill(PresentationAttributes e, RadialGradient p) {

+		System.err.println("RadialGradient not yet supported")

+	}

+

+	def dispatch void applyStroke(PresentationAttributes e, Color p) {

+		e.stroke = p.toRGBHex

+		if( p.opacity != 0.0 ) {

+			e.stroke_opacity = p.opacity.toString

+		}

+	}

+

+	def dispatch void applyStroke(PresentationAttributes e, ImagePattern p) {

+		System.err.println("ImagePattern not yet supported")

+	}

+

+	def dispatch void applyStroke(PresentationAttributes e, LinearGradient p) {

+		var SvgLinearGradientElement l = SvgFactory.eINSTANCE.createSvgLinearGradientElement

+		l.id = EcoreUtil.generateUUID

+		l.x1 = if (p.isProportional) { p.startX.toProportion } else { p.startX.toString }

+		l.x2 = if (p.isProportional) { p.endX.toProportion } else { p.endX.toString }

+		l.y1 = if (p.isProportional) { p.startY.toProportion } else { p.startY.toString }

+		l.y2 = if (p.isProportional) { p.endY.toProportion } else { p.endY.toString }

+		l.spreadMethod = p.cycleMethod.toSpread

+		for( Stop s : p.stops ) {

+			l.children += s.toStop

+		}

+

+		defSupplier.get.children += l;

+		e.stroke = '''url(#«l.id»)'''

+	}

+

+	def dispatch void applyStroke(PresentationAttributes e, RadialGradient p) {

+		System.err.println("RadialGradient not yet supported")

+	}

+

+	def static SvgStopElement toStop(Stop s) {

+		var e = SvgFactory.eINSTANCE.createSvgStopElement

+		e.stop_color = s.color.toRGBHex

+		e.offset = s.offset.toString

+

+		return e;

+	}

+

+	def static SpreadMethod toSpread(CycleMethod cm) {

+		switch(cm) {

+			case NO_CYCLE: SpreadMethod.PAD

+			case REFLECT: SpreadMethod.REFLECT

+			case REPEAT: SpreadMethod.REPEAT

+		}

+	}

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Alignment_baseline.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Alignment_baseline.java
index f40d066..570c9db 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Alignment_baseline.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Alignment_baseline.java
@@ -386,6 +386,8 @@
 	 * Returns the '<em><b>Alignment baseline</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Alignment_baseline get(String literal) {
@@ -402,6 +404,8 @@
 	 * Returns the '<em><b>Alignment baseline</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Alignment_baseline getByName(String name) {
@@ -418,6 +422,8 @@
 	 * Returns the '<em><b>Alignment baseline</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Alignment_baseline get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/BlendMode.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/BlendMode.java
index 9c20c5a..2faa8d8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/BlendMode.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/BlendMode.java
@@ -178,6 +178,8 @@
 	 * Returns the '<em><b>Blend Mode</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BlendMode get(String literal) {
@@ -194,6 +196,8 @@
 	 * Returns the '<em><b>Blend Mode</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BlendMode getByName(String name) {
@@ -210,6 +214,8 @@
 	 * Returns the '<em><b>Blend Mode</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BlendMode get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ChannelSelector.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ChannelSelector.java
index 01b489a..1190083 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ChannelSelector.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ChannelSelector.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Channel Selector</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ChannelSelector get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Channel Selector</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ChannelSelector getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Channel Selector</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ChannelSelector get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ClipPathUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ClipPathUnits.java
index bd6fb74..159da0c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ClipPathUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ClipPathUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Clip Path Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ClipPathUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Clip Path Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ClipPathUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Clip Path Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ClipPathUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Clip_rule.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Clip_rule.java
index d48b2c9..316bfee 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Clip_rule.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Clip_rule.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Clip rule</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Clip_rule get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Clip rule</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Clip_rule getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Clip rule</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Clip_rule get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ColorMatrixType.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ColorMatrixType.java
index 3198d7d..d575f30 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ColorMatrixType.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ColorMatrixType.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Color Matrix Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ColorMatrixType get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Color Matrix Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ColorMatrixType getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Color Matrix Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ColorMatrixType get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation.java
index 23b3f7e..f162c53 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Color interpolation</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Color interpolation</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Color interpolation</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation_filters.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation_filters.java
index 4d9a6b0..b2a9139 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation_filters.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_interpolation_filters.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Color interpolation filters</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation_filters get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Color interpolation filters</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation_filters getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Color interpolation filters</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_interpolation_filters get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_rendering.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_rendering.java
index fb38b85..2da10bb 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_rendering.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Color_rendering.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Color rendering</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_rendering get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Color rendering</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_rendering getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Color rendering</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Color_rendering get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CompositeOperator.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CompositeOperator.java
index e21443a..3c53a8c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CompositeOperator.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CompositeOperator.java
@@ -204,6 +204,8 @@
 	 * Returns the '<em><b>Composite Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static CompositeOperator get(String literal) {
@@ -220,6 +222,8 @@
 	 * Returns the '<em><b>Composite Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static CompositeOperator getByName(String name) {
@@ -236,6 +240,8 @@
 	 * Returns the '<em><b>Composite Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static CompositeOperator get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConditionalProcessingAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConditionalProcessingAttributes.java
index 07ba8d2..eca135f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConditionalProcessingAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConditionalProcessingAttributes.java
@@ -19,12 +19,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes#getRequiredExtensions <em>Required Extensions</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes#getSystemLanguage <em>System Language</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getConditionalProcessingAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ContentElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ContentElement.java
index 807193c..77fa6d3 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ContentElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ContentElement.java
@@ -21,10 +21,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.ContentElement#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getContentElement()
  * @model interface="true" abstract="true"
@@ -33,7 +33,6 @@
 public interface ContentElement<T extends SvgElement> extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Children</b></em>' containment reference list.
-	 * The list contents are of type {@link T}.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConvolveMatrixEdgeMode.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConvolveMatrixEdgeMode.java
index 7e92fdb..7cebb6b 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConvolveMatrixEdgeMode.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ConvolveMatrixEdgeMode.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Convolve Matrix Edge Mode</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ConvolveMatrixEdgeMode get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Convolve Matrix Edge Mode</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ConvolveMatrixEdgeMode getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Convolve Matrix Edge Mode</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ConvolveMatrixEdgeMode get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CoreAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CoreAttributes.java
index 4a9ca5f..9e072a5 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CoreAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/CoreAttributes.java
@@ -19,13 +19,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.CoreAttributes#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.CoreAttributes#getXml__base <em>Xml base</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.CoreAttributes#getXml__lang <em>Xml lang</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.CoreAttributes#getXml__space <em>Xml space</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getCoreAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Direction.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Direction.java
index 53f7386..df4cfc4 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Direction.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Direction.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Direction</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Direction get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Direction</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Direction getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Direction</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Direction get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Display.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Display.java
index 93517ec..57642ac 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Display.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Display.java
@@ -516,6 +516,8 @@
 	 * Returns the '<em><b>Display</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Display get(String literal) {
@@ -532,6 +534,8 @@
 	 * Returns the '<em><b>Display</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Display getByName(String name) {
@@ -548,6 +552,8 @@
 	 * Returns the '<em><b>Display</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Display get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/DocumentEventAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/DocumentEventAttributes.java
index 472c38c..883156b 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/DocumentEventAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/DocumentEventAttributes.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes#getOnunload <em>Onunload</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes#getOnabort <em>Onabort</em>}</li>
@@ -27,7 +28,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes#getOnscroll <em>Onscroll</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes#getOnzoom <em>Onzoom</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getDocumentEventAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Dominant_baseline.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Dominant_baseline.java
index 6603f03..3a3d3d5 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Dominant_baseline.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Dominant_baseline.java
@@ -386,6 +386,8 @@
 	 * Returns the '<em><b>Dominant baseline</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Dominant_baseline get(String literal) {
@@ -402,6 +404,8 @@
 	 * Returns the '<em><b>Dominant baseline</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Dominant_baseline getByName(String name) {
@@ -418,6 +422,8 @@
 	 * Returns the '<em><b>Dominant baseline</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Dominant_baseline get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Fill_rule.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Fill_rule.java
index 22193d7..2dff15f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Fill_rule.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Fill_rule.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Fill rule</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Fill_rule get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Fill rule</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Fill_rule getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Fill rule</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Fill_rule get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterPrimitiveAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterPrimitiveAttributes.java
index 98e8c70..22ae0a1 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterPrimitiveAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterPrimitiveAttributes.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes#getY <em>Y</em>}</li>
@@ -27,7 +28,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes#getResult <em>Result</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes#getIn <em>In</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getFilterPrimitiveAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterUnits.java
index 828bf96..1490409 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/FilterUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Filter Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static FilterUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Filter Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static FilterUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Filter Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static FilterUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_stretch.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_stretch.java
index 0f8326b..0e36060 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_stretch.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_stretch.java
@@ -360,6 +360,8 @@
 	 * Returns the '<em><b>Font stretch</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_stretch get(String literal) {
@@ -376,6 +378,8 @@
 	 * Returns the '<em><b>Font stretch</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_stretch getByName(String name) {
@@ -392,6 +396,8 @@
 	 * Returns the '<em><b>Font stretch</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_stretch get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_style.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_style.java
index 2471233..7a61f0d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_style.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_style.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Font style</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_style get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Font style</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_style getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Font style</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_style get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_variant.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_variant.java
index ef3b4a3..b8d2019 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_variant.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_variant.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Font variant</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_variant get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Font variant</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_variant getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Font variant</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_variant get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_weight.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_weight.java
index 334fbb8..4c9c311 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_weight.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Font_weight.java
@@ -412,6 +412,8 @@
 	 * Returns the '<em><b>Font weight</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_weight get(String literal) {
@@ -428,6 +430,8 @@
 	 * Returns the '<em><b>Font weight</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_weight getByName(String name) {
@@ -444,6 +448,8 @@
 	 * Returns the '<em><b>Font weight</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Font_weight get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GradientUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GradientUnits.java
index 4b69e23..6d7bf2d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GradientUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GradientUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Gradient Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static GradientUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Gradient Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static GradientUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Gradient Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static GradientUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GraphicalEventAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GraphicalEventAttributes.java
index 3215d65..ce55a7c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GraphicalEventAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/GraphicalEventAttributes.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes#getOnfocusin <em>Onfocusin</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes#getOnfocusout <em>Onfocusout</em>}</li>
@@ -31,7 +32,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes#getOnmouseout <em>Onmouseout</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes#getOnload <em>Onload</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getGraphicalEventAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Image_rendering.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Image_rendering.java
index 6de2a3f..6f0ec4b 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Image_rendering.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Image_rendering.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Image rendering</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Image_rendering get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Image rendering</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Image_rendering getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Image rendering</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Image_rendering get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/LengthAdjust.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/LengthAdjust.java
index d7e9221..0d7c270 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/LengthAdjust.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/LengthAdjust.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Length Adjust</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LengthAdjust get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Length Adjust</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LengthAdjust getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Length Adjust</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LengthAdjust get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MarkerUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MarkerUnits.java
index 636f165..3664905 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MarkerUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MarkerUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Marker Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MarkerUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Marker Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MarkerUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Marker Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MarkerUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MaskUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MaskUnits.java
index 2a835dd..84f16a6 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MaskUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MaskUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Mask Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MaskUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Mask Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MaskUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Mask Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MaskUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Method.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Method.java
index 926e77b..2a21fa5 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Method.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Method.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Method</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Method get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Method</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Method getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Method</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Method get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MorphologyOperator.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MorphologyOperator.java
index 859c967..581b39f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MorphologyOperator.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/MorphologyOperator.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Morphology Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MorphologyOperator get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Morphology Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MorphologyOperator getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Morphology Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MorphologyOperator get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Overflow.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Overflow.java
index fb5b1e1..033acdc 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Overflow.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Overflow.java
@@ -178,6 +178,8 @@
 	 * Returns the '<em><b>Overflow</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Overflow get(String literal) {
@@ -194,6 +196,8 @@
 	 * Returns the '<em><b>Overflow</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Overflow getByName(String name) {
@@ -210,6 +214,8 @@
 	 * Returns the '<em><b>Overflow</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Overflow get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PatternUnits.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PatternUnits.java
index 1fb13bb..20c02c7 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PatternUnits.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PatternUnits.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Pattern Units</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static PatternUnits get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Pattern Units</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static PatternUnits getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Pattern Units</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static PatternUnits get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Pointer_events.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Pointer_events.java
index a1e2cc9..11d7caa 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Pointer_events.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Pointer_events.java
@@ -308,6 +308,8 @@
 	 * Returns the '<em><b>Pointer events</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Pointer_events get(String literal) {
@@ -324,6 +326,8 @@
 	 * Returns the '<em><b>Pointer events</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Pointer_events getByName(String name) {
@@ -340,6 +344,8 @@
 	 * Returns the '<em><b>Pointer events</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Pointer_events get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PresentationAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PresentationAttributes.java
index 53c1a17..06c0539 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PresentationAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/PresentationAttributes.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes#getAlignment_baseline <em>Alignment baseline</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes#getBaseline_shift <em>Baseline shift</em>}</li>
@@ -80,7 +81,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes#getWord_spacing <em>Word spacing</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes#getWriting_mode <em>Writing mode</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getPresentationAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Rendering_intent.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Rendering_intent.java
index 50391fb..d9de569 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Rendering_intent.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Rendering_intent.java
@@ -178,6 +178,8 @@
 	 * Returns the '<em><b>Rendering intent</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Rendering_intent get(String literal) {
@@ -194,6 +196,8 @@
 	 * Returns the '<em><b>Rendering intent</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Rendering_intent getByName(String name) {
@@ -210,6 +214,8 @@
 	 * Returns the '<em><b>Rendering intent</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Rendering_intent get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Shape_rendering.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Shape_rendering.java
index 8afedd2..e740b81 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Shape_rendering.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Shape_rendering.java
@@ -178,6 +178,8 @@
 	 * Returns the '<em><b>Shape rendering</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Shape_rendering get(String literal) {
@@ -194,6 +196,8 @@
 	 * Returns the '<em><b>Shape rendering</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Shape_rendering getByName(String name) {
@@ -210,6 +214,8 @@
 	 * Returns the '<em><b>Shape rendering</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Shape_rendering get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Spacing.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Spacing.java
index 9a1b8aa..352fa3f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Spacing.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Spacing.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Spacing</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Spacing get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Spacing</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Spacing getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Spacing</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Spacing get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SpreadMethod.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SpreadMethod.java
index f394719..158b192 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SpreadMethod.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SpreadMethod.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Spread Method</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static SpreadMethod get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Spread Method</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static SpreadMethod getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Spread Method</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static SpreadMethod get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/StitchTiles.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/StitchTiles.java
index b6c9d63..d98b90d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/StitchTiles.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/StitchTiles.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Stitch Tiles</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static StitchTiles get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Stitch Tiles</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static StitchTiles getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Stitch Tiles</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static StitchTiles get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linecap.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linecap.java
index cb20654..7ef91ca 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linecap.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linecap.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Stroke linecap</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linecap get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Stroke linecap</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linecap getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Stroke linecap</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linecap get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linejoin.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linejoin.java
index c79b318..6c38160 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linejoin.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Stroke_linejoin.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Stroke linejoin</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linejoin get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Stroke linejoin</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linejoin getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Stroke linejoin</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Stroke_linejoin get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphElement.java
index 895c748..2d46bc3 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement#getStyle <em>Style</em>}</li>
@@ -30,7 +31,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement#getFormat <em>Format</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement#getRotate <em>Rotate</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgAltGlyphElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphRefElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphRefElement.java
index bda44d2..5959f49 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphRefElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgAltGlyphRefElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement#getStyle <em>Style</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement#getGlyphRef <em>Glyph Ref</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement#getFormat <em>Format</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgAltGlyphRefElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgCircleElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgCircleElement.java
index 48b5aca..df40623 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgCircleElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgCircleElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement#getStyle <em>Style</em>}</li>
@@ -27,7 +28,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement#getCy <em>Cy</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement#getR <em>R</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgCircleElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgClipPathElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgClipPathElement.java
index 7fd9d55..e8eb957 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgClipPathElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgClipPathElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement#getStyle <em>Style</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement#getClipPathUnits <em>Clip Path Units</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgClipPathElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgColorProfileElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgColorProfileElement.java
index 533793f..559ba17 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgColorProfileElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgColorProfileElement.java
@@ -18,12 +18,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgColorProfileElement#getLocal <em>Local</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgColorProfileElement#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgColorProfileElement#getRendering_intent <em>Rendering intent</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgColorProfileElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDefsElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDefsElement.java
index 348c314..73cdb25 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDefsElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDefsElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement#getTransform <em>Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgDefsElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDescElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDescElement.java
index e661369..ea358b5 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDescElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgDescElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDescElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgDescElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgDescElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgEllipseElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgEllipseElement.java
index 9b4615f..b137795 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgEllipseElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgEllipseElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement#getStyle <em>Style</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement#getRx <em>Rx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement#getRy <em>Ry</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgEllipseElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeBlendElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeBlendElement.java
index 487c47d..8a953ab 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeBlendElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeBlendElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement#getIn2 <em>In2</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement#getMode <em>Mode</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeBlendElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeColorMatrixElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeColorMatrixElement.java
index e6897e8..226f055 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeColorMatrixElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeColorMatrixElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement#getValues <em>Values</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeColorMatrixElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeComponentTransferElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeComponentTransferElement.java
index 0f35273..fe9c977 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeComponentTransferElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeComponentTransferElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeComponentTransferElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeCompositeElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeCompositeElement.java
index f05023c..0335362 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeCompositeElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeCompositeElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement#getStyle <em>Style</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement#getK3 <em>K3</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement#getK4 <em>K4</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeCompositeElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeConvolveMatrixElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeConvolveMatrixElement.java
index 83cd374..c95a7c9 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeConvolveMatrixElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeConvolveMatrixElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement#getStyle <em>Style</em>}</li>
@@ -31,7 +32,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement#isPreserveAlpha <em>Preserve Alpha</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeConvolveMatrixElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDiffuseLightingElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDiffuseLightingElement.java
index d161ed1..9ce90fd 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDiffuseLightingElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDiffuseLightingElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement#getStyle <em>Style</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement#getDiffuseConstant <em>Diffuse Constant</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeDiffuseLightingElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDisplacementMapElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDisplacementMapElement.java
index 2a4ca4b..dc83556 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDisplacementMapElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDisplacementMapElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement#getStyle <em>Style</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement#getXChannelSelector <em>XChannel Selector</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement#getYChannelSelector <em>YChannel Selector</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeDisplacementMapElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDistantLightElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDistantLightElement.java
index 2ba3b8d..a54b0aa 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDistantLightElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeDistantLightElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement#getAzimuth <em>Azimuth</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement#getElevation <em>Elevation</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeDistantLightElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeFloodElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeFloodElement.java
index b5e925b..836b3a8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeFloodElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeFloodElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeFloodElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeFloodElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeFloodElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeGaussianBlurElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeGaussianBlurElement.java
index 80217e4..4e4522e 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeGaussianBlurElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeGaussianBlurElement.java
@@ -18,12 +18,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement#getStdDeviation <em>Std Deviation</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeGaussianBlurElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeImageElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeImageElement.java
index 2e40e7f..5488a48 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeImageElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeImageElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement#getPreserveAspectRatio <em>Preserve Aspect Ratio</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeImageElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMergeElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMergeElement.java
index 325ba4c..9107be0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMergeElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMergeElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeMergeElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMorphologyElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMorphologyElement.java
index 36afefe..7cf21b5 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMorphologyElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeMorphologyElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement#getRadius <em>Radius</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeMorphologyElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeOffsetElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeOffsetElement.java
index f03befa..e416376 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeOffsetElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeOffsetElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement#getDx <em>Dx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement#getDy <em>Dy</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeOffsetElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFePointLightElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFePointLightElement.java
index eb1715e..e1b7740 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFePointLightElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFePointLightElement.java
@@ -18,12 +18,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFePointLightElement#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFePointLightElement#getY <em>Y</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFePointLightElement#getZ <em>Z</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFePointLightElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpecularLightingElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpecularLightingElement.java
index 75f8c46..8f54803 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpecularLightingElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpecularLightingElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement#getStyle <em>Style</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement#getSpecularExponent <em>Specular Exponent</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeSpecularLightingElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpotLightElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpotLightElement.java
index 0896e65..a916726 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpotLightElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeSpotLightElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement#getY <em>Y</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement#getSpecularExponent <em>Specular Exponent</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement#getLimitingConeAngle <em>Limiting Cone Angle</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeSpotLightElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTileElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTileElement.java
index 2b4f789..616f1a0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTileElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTileElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTileElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTileElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeTileElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTurbulenceElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTurbulenceElement.java
index 86ff0ee..53cc573 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTurbulenceElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFeTurbulenceElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement#getStyle <em>Style</em>}</li>
@@ -27,7 +28,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement#getStitchTiles <em>Stitch Tiles</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFeTurbulenceElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFilterElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFilterElement.java
index 60d28af..4b3f338 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFilterElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgFilterElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement#getStyle <em>Style</em>}</li>
@@ -30,7 +31,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement#getFilterUnits <em>Filter Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement#getPrimitiveUnits <em>Primitive Units</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgFilterElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgGElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgGElement.java
index 0c96ffb..6a9aecd 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgGElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgGElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgGElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgGElement#getStyle <em>Style</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgGElement#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgGElement#getY <em>Y</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgGElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgImageElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgImageElement.java
index a19a725..d8c12ed 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgImageElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgImageElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgImageElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgImageElement#getStyle <em>Style</em>}</li>
@@ -29,7 +30,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgImageElement#getWidth <em>Width</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgImageElement#getHeight <em>Height</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgImageElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLineElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLineElement.java
index c782131..90b32f9 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLineElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLineElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLineElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLineElement#getStyle <em>Style</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLineElement#getX2 <em>X2</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLineElement#getY2 <em>Y2</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgLineElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLinearGradientElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLinearGradientElement.java
index 175fe5e..d293a10 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLinearGradientElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgLinearGradientElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement#getStyle <em>Style</em>}</li>
@@ -30,7 +31,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement#getSpreadMethod <em>Spread Method</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement#getGradientTransform <em>Gradient Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgLinearGradientElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMarkerElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMarkerElement.java
index 81723a3..075e472 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMarkerElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMarkerElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement#getStyle <em>Style</em>}</li>
@@ -31,7 +32,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement#getMarkerHeight <em>Marker Height</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement#getOrient <em>Orient</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgMarkerElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMaskElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMaskElement.java
index 34da592..0a3b80e 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMaskElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgMaskElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement#getStyle <em>Style</em>}</li>
@@ -29,7 +30,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement#getMaskUnits <em>Mask Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement#getMaskContentUnits <em>Mask Content Units</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgMaskElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPackage.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPackage.java
index cc11c7a..0290675 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPackage.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPackage.java
@@ -13447,13 +13447,22 @@
 	int SVG_TEXT_ELEMENT__TEXT_LENGTH = SVG_ELEMENT_FEATURE_COUNT + 87;
 
 	/**
+	 * The feature id for the '<em><b>Text Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SVG_TEXT_ELEMENT__TEXT_CONTENT = SVG_ELEMENT_FEATURE_COUNT + 88;
+
+	/**
 	 * The number of structural features of the '<em>Text Element</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SVG_TEXT_ELEMENT_FEATURE_COUNT = SVG_ELEMENT_FEATURE_COUNT + 88;
+	int SVG_TEXT_ELEMENT_FEATURE_COUNT = SVG_ELEMENT_FEATURE_COUNT + 89;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl <em>Tspan Element</em>}' class.
@@ -41813,6 +41822,17 @@
 	EAttribute getSvgTextElement_TextLength();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getTextContent <em>Text Content</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Text Content</em>'.
+	 * @see org.eclipse.fx.formats.svg.svg.SvgTextElement#getTextContent()
+	 * @see #getSvgTextElement()
+	 * @generated
+	 */
+	EAttribute getSvgTextElement_TextContent();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement <em>Tspan Element</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -47604,6 +47624,14 @@
 		EAttribute SVG_TEXT_ELEMENT__TEXT_LENGTH = eINSTANCE.getSvgTextElement_TextLength();
 
 		/**
+		 * The meta object literal for the '<em><b>Text Content</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SVG_TEXT_ELEMENT__TEXT_CONTENT = eINSTANCE.getSvgTextElement_TextContent();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl <em>Tspan Element</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPathElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPathElement.java
index 7e7c55b..a1f0d7f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPathElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPathElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPathElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPathElement#getStyle <em>Style</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPathElement#getD <em>D</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPathElement#getPathLength <em>Path Length</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgPathElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPatternElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPatternElement.java
index cd1f7af..d8bf63c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPatternElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPatternElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement#getStyle <em>Style</em>}</li>
@@ -32,7 +33,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement#getPatternContentUnits <em>Pattern Content Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement#getPatternTransform <em>Pattern Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgPatternElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolygonElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolygonElement.java
index d89683f..1cfdd2d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolygonElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolygonElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement#getStyle <em>Style</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement#getPoints <em>Points</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgPolygonElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolylineElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolylineElement.java
index e3df0c4..155dfa1 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolylineElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgPolylineElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement#getStyle <em>Style</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement#getPoints <em>Points</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgPolylineElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRadialGradientElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRadialGradientElement.java
index 978ec86..3a14dff 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRadialGradientElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRadialGradientElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement#getStyle <em>Style</em>}</li>
@@ -31,7 +32,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement#getGradientUnits <em>Gradient Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement#getGradientTransform <em>Gradient Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgRadialGradientElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRectElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRectElement.java
index 088c2ce..7963077 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRectElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgRectElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRectElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRectElement#getStyle <em>Style</em>}</li>
@@ -30,7 +31,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRectElement#getRx <em>Rx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgRectElement#getRy <em>Ry</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgRectElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgStopElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgStopElement.java
index 075be28..9f0e60f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgStopElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgStopElement.java
@@ -18,12 +18,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgStopElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgStopElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgStopElement#getOffset <em>Offset</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgStopElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSvgElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSvgElement.java
index 2263875..c3cd9b7 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSvgElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSvgElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement#getStyle <em>Style</em>}</li>
@@ -35,7 +36,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement#getContentStyleType <em>Content Style Type</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement#getStyleSheet <em>Style Sheet</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgSvgElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSwitchElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSwitchElement.java
index 88906e9..75479bb 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSwitchElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSwitchElement.java
@@ -18,13 +18,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement#getTransform <em>Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgSwitchElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSymbolElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSymbolElement.java
index 0b139b9..6029ee4 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSymbolElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgSymbolElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement#getStyle <em>Style</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement#getViewBox <em>View Box</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement#getPreserveAspectRatio <em>Preserve Aspect Ratio</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgSymbolElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextElement.java
index 488a7bd..aed62d0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getStyle <em>Style</em>}</li>
@@ -30,8 +31,8 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getDy <em>Dy</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getRotate <em>Rotate</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getTextLength <em>Text Length</em>}</li>
+ *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getTextContent <em>Text Content</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTextElement()
  * @model
@@ -328,4 +329,30 @@
 	 */
 	void setTextLength(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Text Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Text Content</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Text Content</em>' attribute.
+	 * @see #setTextContent(String)
+	 * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTextElement_TextContent()
+	 * @model
+	 * @generated
+	 */
+	String getTextContent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.fx.formats.svg.svg.SvgTextElement#getTextContent <em>Text Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Text Content</em>' attribute.
+	 * @see #getTextContent()
+	 * @generated
+	 */
+	void setTextContent(String value);
+
 } // SvgTextElement
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextPathElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextPathElement.java
index a7ef37c..d91ee8d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextPathElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTextPathElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement#getStyle <em>Style</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement#getMethod <em>Method</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement#getSpacing <em>Spacing</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTextPathElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTitleElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTitleElement.java
index fbf148f..6e466a3 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTitleElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTitleElement.java
@@ -18,11 +18,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTitleElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTitleElement#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTitleElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTrefElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTrefElement.java
index b0e5bf2..7c3a4d2 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTrefElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTrefElement.java
@@ -18,12 +18,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTrefElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTrefElement#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTrefElement#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTrefElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTspanElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTspanElement.java
index 26fa80b..bce77e8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTspanElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgTspanElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement#getStyle <em>Style</em>}</li>
@@ -30,7 +31,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement#getTextLength <em>Text Length</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement#getLengthAdjust <em>Length Adjust</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgTspanElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgUseElement.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgUseElement.java
index 61d3047..d541348 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgUseElement.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/SvgUseElement.java
@@ -18,6 +18,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgUseElement#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgUseElement#getStyle <em>Style</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgUseElement#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.SvgUseElement#getY <em>Y</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getSvgUseElement()
  * @model
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_anchor.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_anchor.java
index a53a34e..349d844 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_anchor.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_anchor.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Text anchor</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_anchor get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Text anchor</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_anchor getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Text anchor</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_anchor get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_rendering.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_rendering.java
index 11694a4..b8872ae 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_rendering.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Text_rendering.java
@@ -178,6 +178,8 @@
 	 * Returns the '<em><b>Text rendering</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_rendering get(String literal) {
@@ -194,6 +196,8 @@
 	 * Returns the '<em><b>Text rendering</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_rendering getByName(String name) {
@@ -210,6 +214,8 @@
 	 * Returns the '<em><b>Text rendering</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Text_rendering get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/TurbulenceType.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/TurbulenceType.java
index 4b1cb11..523a3e3 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/TurbulenceType.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/TurbulenceType.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Turbulence Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static TurbulenceType get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Turbulence Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static TurbulenceType getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Turbulence Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static TurbulenceType get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Unicode_bidi.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Unicode_bidi.java
index 26cd824..593b1ec 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Unicode_bidi.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Unicode_bidi.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Unicode bidi</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Unicode_bidi get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Unicode bidi</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Unicode_bidi getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Unicode bidi</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Unicode_bidi get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Visibility.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Visibility.java
index 71c6841..9ee8fb1 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Visibility.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Visibility.java
@@ -152,6 +152,8 @@
 	 * Returns the '<em><b>Visibility</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Visibility get(String literal) {
@@ -168,6 +170,8 @@
 	 * Returns the '<em><b>Visibility</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Visibility getByName(String name) {
@@ -184,6 +188,8 @@
 	 * Returns the '<em><b>Visibility</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Visibility get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Writing_mode.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Writing_mode.java
index 08cf457..19ce438 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Writing_mode.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/Writing_mode.java
@@ -230,6 +230,8 @@
 	 * Returns the '<em><b>Writing mode</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Writing_mode get(String literal) {
@@ -246,6 +248,8 @@
 	 * Returns the '<em><b>Writing mode</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Writing_mode getByName(String name) {
@@ -262,6 +266,8 @@
 	 * Returns the '<em><b>Writing mode</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Writing_mode get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/XLinkAttributes.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/XLinkAttributes.java
index 29c1335..bb415bf 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/XLinkAttributes.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/XLinkAttributes.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes#getXlink__href <em>Xlink href</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes#getXlink__show <em>Xlink show</em>}</li>
@@ -29,7 +30,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes#getXlink__title <em>Xlink title</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes#getResolvedInstance <em>Resolved Instance</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.fx.formats.svg.svg.SvgPackage#getXLinkAttributes()
  * @model interface="true" abstract="true"
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ZoomAndPan.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ZoomAndPan.java
index f8fb05a..5f92097 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ZoomAndPan.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/ZoomAndPan.java
@@ -100,6 +100,8 @@
 	 * Returns the '<em><b>Zoom And Pan</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ZoomAndPan get(String literal) {
@@ -116,6 +118,8 @@
 	 * Returns the '<em><b>Zoom And Pan</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ZoomAndPan getByName(String name) {
@@ -132,6 +136,8 @@
 	 * Returns the '<em><b>Zoom And Pan</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ZoomAndPan get(int value) {
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/AnimationElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/AnimationElementImpl.java
index db36aac..aa2de2a 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/AnimationElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/AnimationElementImpl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Animation Element</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphDefElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphDefElementImpl.java
index 71849a5..d39350e 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphDefElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphDefElementImpl.java
@@ -38,6 +38,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphDefElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphDefElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -45,7 +46,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphDefElementImpl#getXml__space <em>Xml space</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphDefElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphElementImpl.java
index 5f03d1a..c32e83d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -165,7 +166,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphElementImpl#getFormat <em>Format</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphElementImpl#getRotate <em>Rotate</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphItemElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphItemElementImpl.java
index ace8400..b50dd79 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphItemElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphItemElementImpl.java
@@ -38,6 +38,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphItemElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphItemElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -45,7 +46,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphItemElementImpl#getXml__space <em>Xml space</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphItemElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphRefElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphRefElementImpl.java
index 155f8c6..d054584 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphRefElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAltGlyphRefElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphRefElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphRefElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -146,7 +147,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphRefElementImpl#getGlyphRef <em>Glyph Ref</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgAltGlyphRefElementImpl#getFormat <em>Format</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAnimateElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAnimateElementImpl.java
index 55d2aaf..3710622 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAnimateElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgAnimateElementImpl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Animate Element</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgCircleElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgCircleElementImpl.java
index 0ea71cb..c2fc263 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgCircleElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgCircleElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgCircleElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgCircleElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -154,7 +155,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgCircleElementImpl#getCy <em>Cy</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgCircleElementImpl#getR <em>R</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgClipPathElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgClipPathElementImpl.java
index e5da70e..c47cdef 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgClipPathElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgClipPathElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgClipPathElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgClipPathElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -139,7 +140,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgClipPathElementImpl#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgClipPathElementImpl#getClipPathUnits <em>Clip Path Units</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgColorProfileElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgColorProfileElementImpl.java
index 8842463..4121e7f 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgColorProfileElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgColorProfileElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgColorProfileElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgColorProfileElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -142,7 +143,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgColorProfileElementImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgColorProfileElementImpl#getRendering_intent <em>Rendering intent</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDefsElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDefsElementImpl.java
index 6d05dbb..842d617 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDefsElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDefsElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDefsElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDefsElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
@@ -150,7 +151,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDefsElementImpl#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDefsElementImpl#getTransform <em>Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDescElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDescElementImpl.java
index ce8e4fc..2df76f9 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDescElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgDescElementImpl.java
@@ -39,6 +39,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDescElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDescElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -48,7 +49,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDescElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgDescElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgEllipseElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgEllipseElementImpl.java
index 3f35604..e01a879 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgEllipseElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgEllipseElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgEllipseElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgEllipseElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -155,7 +156,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgEllipseElementImpl#getRx <em>Rx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgEllipseElementImpl#getRy <em>Ry</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFactoryImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFactoryImpl.java
index 4793269..143b88c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFactoryImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFactoryImpl.java
@@ -35,7 +35,7 @@
 	 */
 	public static SvgFactory init() {
 		try {
-			SvgFactory theSvgFactory = (SvgFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.w3.org/2000/svg"); 
+			SvgFactory theSvgFactory = (SvgFactory)EPackage.Registry.INSTANCE.getEFactory(SvgPackage.eNS_URI);
 			if (theSvgFactory != null) {
 				return theSvgFactory;
 			}
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeBlendElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeBlendElementImpl.java
index 478d9b4..59854d0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeBlendElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeBlendElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeBlendElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeBlendElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -141,7 +142,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeBlendElementImpl#getIn2 <em>In2</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeBlendElementImpl#getMode <em>Mode</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeColorMatrixElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeColorMatrixElementImpl.java
index e7aad8b..ae3d658 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeColorMatrixElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeColorMatrixElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeColorMatrixElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeColorMatrixElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -141,7 +142,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeColorMatrixElementImpl#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeColorMatrixElementImpl#getValues <em>Values</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeComponentTransferElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeComponentTransferElementImpl.java
index 09e29c6..4d7dfec 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeComponentTransferElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeComponentTransferElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeComponentTransferElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeComponentTransferElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -138,7 +139,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeComponentTransferElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeComponentTransferElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeCompositeElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeCompositeElementImpl.java
index d4f7a7d..d655a7a 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeCompositeElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeCompositeElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeCompositeElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeCompositeElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -145,7 +146,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeCompositeElementImpl#getK3 <em>K3</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeCompositeElementImpl#getK4 <em>K4</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeConvolveMatrixElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeConvolveMatrixElementImpl.java
index 0bbc253..6b7053d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeConvolveMatrixElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeConvolveMatrixElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeConvolveMatrixElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeConvolveMatrixElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -148,7 +149,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeConvolveMatrixElementImpl#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeConvolveMatrixElementImpl#isPreserveAlpha <em>Preserve Alpha</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDiffuseLightingElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDiffuseLightingElementImpl.java
index 3623d56..12feca3 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDiffuseLightingElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDiffuseLightingElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDiffuseLightingElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDiffuseLightingElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -141,7 +142,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDiffuseLightingElementImpl#getDiffuseConstant <em>Diffuse Constant</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDiffuseLightingElementImpl#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDisplacementMapElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDisplacementMapElementImpl.java
index f2d8156..1e886f1 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDisplacementMapElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDisplacementMapElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDisplacementMapElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDisplacementMapElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -143,7 +144,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDisplacementMapElementImpl#getXChannelSelector <em>XChannel Selector</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDisplacementMapElementImpl#getYChannelSelector <em>YChannel Selector</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDistantLightElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDistantLightElementImpl.java
index c07885c..dc81f1a 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDistantLightElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeDistantLightElementImpl.java
@@ -38,6 +38,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDistantLightElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDistantLightElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -47,7 +48,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDistantLightElementImpl#getAzimuth <em>Azimuth</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeDistantLightElementImpl#getElevation <em>Elevation</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFloodElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFloodElementImpl.java
index cfce14a..7f3bae4 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFloodElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFloodElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFloodElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFloodElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -138,7 +139,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFloodElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFloodElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncAElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncAElementImpl.java
index 4fa371d..c850f96 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncAElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncAElementImpl.java
@@ -63,6 +63,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncAElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncAElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -129,7 +130,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncAElementImpl#getWriting_mode <em>Writing mode</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncAElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncBElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncBElementImpl.java
index d901c5f..06bb164 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncBElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncBElementImpl.java
@@ -63,6 +63,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncBElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncBElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -129,7 +130,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncBElementImpl#getWriting_mode <em>Writing mode</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncBElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncGElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncGElementImpl.java
index dcc2596..30e07ee 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncGElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncGElementImpl.java
@@ -63,6 +63,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncGElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncGElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -129,7 +130,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncGElementImpl#getWriting_mode <em>Writing mode</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncGElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncRElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncRElementImpl.java
index 283bec1..fddf7d8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncRElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeFuncRElementImpl.java
@@ -63,6 +63,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncRElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncRElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -129,7 +130,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncRElementImpl#getWriting_mode <em>Writing mode</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeFuncRElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeGaussianBlurElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeGaussianBlurElementImpl.java
index d38493a..cfd6de7 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeGaussianBlurElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeGaussianBlurElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeGaussianBlurElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeGaussianBlurElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -140,7 +141,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeGaussianBlurElementImpl#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeGaussianBlurElementImpl#getStdDeviation <em>Std Deviation</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeImageElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeImageElementImpl.java
index 81eb2bb..11e6b7a 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeImageElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeImageElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeImageElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeImageElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -149,7 +150,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeImageElementImpl#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeImageElementImpl#getPreserveAspectRatio <em>Preserve Aspect Ratio</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeElementImpl.java
index c4a0544..91ca168 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -138,7 +139,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeNodeElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeNodeElementImpl.java
index 049c90e..f877441 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeNodeElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMergeNodeElementImpl.java
@@ -38,6 +38,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeNodeElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeNodeElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -45,7 +46,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeNodeElementImpl#getXml__space <em>Xml space</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMergeNodeElementImpl#getChildren <em>Children</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMorphologyElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMorphologyElementImpl.java
index 2e005e9..f6343e0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMorphologyElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeMorphologyElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMorphologyElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMorphologyElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -141,7 +142,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMorphologyElementImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeMorphologyElementImpl#getRadius <em>Radius</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeOffsetElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeOffsetElementImpl.java
index babcb9e..7fcc71c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeOffsetElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeOffsetElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeOffsetElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeOffsetElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -140,7 +141,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeOffsetElementImpl#getDx <em>Dx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeOffsetElementImpl#getDy <em>Dy</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFePointLightElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFePointLightElementImpl.java
index 68682b6..2f771c8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFePointLightElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFePointLightElementImpl.java
@@ -39,6 +39,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFePointLightElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFePointLightElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -49,7 +50,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFePointLightElementImpl#getY <em>Y</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFePointLightElementImpl#getZ <em>Z</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpecularLightingElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpecularLightingElementImpl.java
index e57bb02..8dcb06d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpecularLightingElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpecularLightingElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpecularLightingElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpecularLightingElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -142,7 +143,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpecularLightingElementImpl#getSpecularExponent <em>Specular Exponent</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpecularLightingElementImpl#getKernelUnitLength <em>Kernel Unit Length</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpotLightElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpotLightElementImpl.java
index 4fb3e09..09a282b 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpotLightElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeSpotLightElementImpl.java
@@ -39,6 +39,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpotLightElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpotLightElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -54,7 +55,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpotLightElementImpl#getSpecularExponent <em>Specular Exponent</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeSpotLightElementImpl#getLimitingConeAngle <em>Limiting Cone Angle</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTileElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTileElementImpl.java
index 2f8ae01..ba2bbed 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTileElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTileElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTileElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTileElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -138,7 +139,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTileElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTileElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTurbulenceElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTurbulenceElementImpl.java
index 3d37c02..a17d6fe 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTurbulenceElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFeTurbulenceElementImpl.java
@@ -66,6 +66,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTurbulenceElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTurbulenceElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -145,7 +146,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTurbulenceElementImpl#getStitchTiles <em>Stitch Tiles</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFeTurbulenceElementImpl#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFilterElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFilterElementImpl.java
index 56d97a1..cd48590 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFilterElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgFilterElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFilterElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFilterElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -149,7 +150,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFilterElementImpl#getFilterUnits <em>Filter Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgFilterElementImpl#getPrimitiveUnits <em>Primitive Units</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgGElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgGElementImpl.java
index bbce536..788b071 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgGElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgGElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgGElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgGElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
@@ -152,7 +153,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgGElementImpl#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgGElementImpl#getY <em>Y</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgImageElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgImageElementImpl.java
index 33f9712..c8e86c6 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgImageElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgImageElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgImageElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgImageElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -164,7 +165,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgImageElementImpl#getWidth <em>Width</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgImageElementImpl#getHeight <em>Height</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLineElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLineElementImpl.java
index f65526e..4bf407c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLineElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLineElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLineElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLineElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -155,7 +156,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLineElementImpl#getX2 <em>X2</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLineElementImpl#getY2 <em>Y2</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLinearGradientElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLinearGradientElementImpl.java
index 3af1d4e..3f8ddfe 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLinearGradientElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgLinearGradientElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLinearGradientElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLinearGradientElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -151,7 +152,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLinearGradientElementImpl#getSpreadMethod <em>Spread Method</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgLinearGradientElementImpl#getGradientTransform <em>Gradient Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMarkerElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMarkerElementImpl.java
index 5c2f0b5..dddf833 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMarkerElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMarkerElementImpl.java
@@ -64,6 +64,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMarkerElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMarkerElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -141,7 +142,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMarkerElementImpl#getMarkerHeight <em>Marker Height</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMarkerElementImpl#getOrient <em>Orient</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMaskElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMaskElementImpl.java
index ecc0712..204712e 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMaskElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMaskElementImpl.java
@@ -65,6 +65,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMaskElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMaskElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -143,7 +144,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMaskElementImpl#getMaskUnits <em>Mask Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMaskElementImpl#getMaskContentUnits <em>Mask Content Units</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMetadataElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMetadataElementImpl.java
index 16ce1fe..0e119d1 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMetadataElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgMetadataElementImpl.java
@@ -27,13 +27,13 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMetadataElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMetadataElementImpl#getXml__base <em>Xml base</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMetadataElementImpl#getXml__lang <em>Xml lang</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgMetadataElementImpl#getXml__space <em>Xml space</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPackageImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPackageImpl.java
index cf19929..88dbf6d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPackageImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPackageImpl.java
@@ -19,6 +19,137 @@
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.ETypeParameter;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.fx.formats.svg.svg.Alignment_baseline;
+import org.eclipse.fx.formats.svg.svg.AnimationElement;
+import org.eclipse.fx.formats.svg.svg.BasicShapeElement;
+import org.eclipse.fx.formats.svg.svg.BlendMode;
+import org.eclipse.fx.formats.svg.svg.ChannelSelector;
+import org.eclipse.fx.formats.svg.svg.ClipPathUnits;
+import org.eclipse.fx.formats.svg.svg.Clip_rule;
+import org.eclipse.fx.formats.svg.svg.ColorMatrixType;
+import org.eclipse.fx.formats.svg.svg.Color_interpolation;
+import org.eclipse.fx.formats.svg.svg.Color_interpolation_filters;
+import org.eclipse.fx.formats.svg.svg.Color_rendering;
+import org.eclipse.fx.formats.svg.svg.CompositeOperator;
+import org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes;
+import org.eclipse.fx.formats.svg.svg.ContainerElement;
+import org.eclipse.fx.formats.svg.svg.ContentElement;
+import org.eclipse.fx.formats.svg.svg.ConvolveMatrixEdgeMode;
+import org.eclipse.fx.formats.svg.svg.CoreAttributes;
+import org.eclipse.fx.formats.svg.svg.DescriptiveElement;
+import org.eclipse.fx.formats.svg.svg.Direction;
+import org.eclipse.fx.formats.svg.svg.Display;
+import org.eclipse.fx.formats.svg.svg.DocumentEventAttributes;
+import org.eclipse.fx.formats.svg.svg.Dominant_baseline;
+import org.eclipse.fx.formats.svg.svg.Fill_rule;
+import org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes;
+import org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement;
+import org.eclipse.fx.formats.svg.svg.FilterUnits;
+import org.eclipse.fx.formats.svg.svg.Font_stretch;
+import org.eclipse.fx.formats.svg.svg.Font_style;
+import org.eclipse.fx.formats.svg.svg.Font_variant;
+import org.eclipse.fx.formats.svg.svg.Font_weight;
+import org.eclipse.fx.formats.svg.svg.GradientElement;
+import org.eclipse.fx.formats.svg.svg.GradientUnits;
+import org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes;
+import org.eclipse.fx.formats.svg.svg.GraphicsElement;
+import org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement;
+import org.eclipse.fx.formats.svg.svg.Image_rendering;
+import org.eclipse.fx.formats.svg.svg.LengthAdjust;
+import org.eclipse.fx.formats.svg.svg.LightSourceElement;
+import org.eclipse.fx.formats.svg.svg.MarkerUnits;
+import org.eclipse.fx.formats.svg.svg.MaskUnits;
+import org.eclipse.fx.formats.svg.svg.Method;
+import org.eclipse.fx.formats.svg.svg.MorphologyOperator;
+import org.eclipse.fx.formats.svg.svg.Overflow;
+import org.eclipse.fx.formats.svg.svg.PatternUnits;
+import org.eclipse.fx.formats.svg.svg.Pointer_events;
+import org.eclipse.fx.formats.svg.svg.PresentationAttributes;
+import org.eclipse.fx.formats.svg.svg.Rendering_intent;
+import org.eclipse.fx.formats.svg.svg.ShapeElement;
+import org.eclipse.fx.formats.svg.svg.Shape_rendering;
+import org.eclipse.fx.formats.svg.svg.Spacing;
+import org.eclipse.fx.formats.svg.svg.SpreadMethod;
+import org.eclipse.fx.formats.svg.svg.StitchTiles;
+import org.eclipse.fx.formats.svg.svg.Stroke_linecap;
+import org.eclipse.fx.formats.svg.svg.Stroke_linejoin;
+import org.eclipse.fx.formats.svg.svg.StructuralElement;
+import org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement;
+import org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement;
+import org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement;
+import org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement;
+import org.eclipse.fx.formats.svg.svg.SvgAnimateElement;
+import org.eclipse.fx.formats.svg.svg.SvgCircleElement;
+import org.eclipse.fx.formats.svg.svg.SvgClipPathElement;
+import org.eclipse.fx.formats.svg.svg.SvgColorProfileElement;
+import org.eclipse.fx.formats.svg.svg.SvgDefsElement;
+import org.eclipse.fx.formats.svg.svg.SvgDescElement;
+import org.eclipse.fx.formats.svg.svg.SvgElement;
+import org.eclipse.fx.formats.svg.svg.SvgEllipseElement;
+import org.eclipse.fx.formats.svg.svg.SvgFactory;
+import org.eclipse.fx.formats.svg.svg.SvgFeBlendElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeFloodElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeImageElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeMergeElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement;
+import org.eclipse.fx.formats.svg.svg.SvgFePointLightElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeTileElement;
+import org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement;
+import org.eclipse.fx.formats.svg.svg.SvgFilterElement;
+import org.eclipse.fx.formats.svg.svg.SvgGElement;
+import org.eclipse.fx.formats.svg.svg.SvgImageElement;
+import org.eclipse.fx.formats.svg.svg.SvgLineElement;
+import org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement;
+import org.eclipse.fx.formats.svg.svg.SvgMarkerElement;
+import org.eclipse.fx.formats.svg.svg.SvgMaskElement;
+import org.eclipse.fx.formats.svg.svg.SvgMetadataElement;
+import org.eclipse.fx.formats.svg.svg.SvgPackage;
+import org.eclipse.fx.formats.svg.svg.SvgPathElement;
+import org.eclipse.fx.formats.svg.svg.SvgPatternElement;
+import org.eclipse.fx.formats.svg.svg.SvgPolygonElement;
+import org.eclipse.fx.formats.svg.svg.SvgPolylineElement;
+import org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement;
+import org.eclipse.fx.formats.svg.svg.SvgRectElement;
+import org.eclipse.fx.formats.svg.svg.SvgStopElement;
+import org.eclipse.fx.formats.svg.svg.SvgSvgElement;
+import org.eclipse.fx.formats.svg.svg.SvgSwitchElement;
+import org.eclipse.fx.formats.svg.svg.SvgSymbolElement;
+import org.eclipse.fx.formats.svg.svg.SvgTextElement;
+import org.eclipse.fx.formats.svg.svg.SvgTextPathElement;
+import org.eclipse.fx.formats.svg.svg.SvgTitleElement;
+import org.eclipse.fx.formats.svg.svg.SvgTrefElement;
+import org.eclipse.fx.formats.svg.svg.SvgTspanElement;
+import org.eclipse.fx.formats.svg.svg.SvgUseElement;
+import org.eclipse.fx.formats.svg.svg.TextContentChildElement;
+import org.eclipse.fx.formats.svg.svg.TextContentElement;
+import org.eclipse.fx.formats.svg.svg.Text_anchor;
+import org.eclipse.fx.formats.svg.svg.Text_rendering;
+import org.eclipse.fx.formats.svg.svg.TurbulenceType;
+import org.eclipse.fx.formats.svg.svg.Unicode_bidi;
+import org.eclipse.fx.formats.svg.svg.Visibility;
+import org.eclipse.fx.formats.svg.svg.Writing_mode;
+import org.eclipse.fx.formats.svg.svg.XLinkAttributes;
+import org.eclipse.fx.formats.svg.svg.ZoomAndPan;
+import org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____;
+import org.eclipse.fx.formats.svg.svg.____DATATYPES____;
+import org.eclipse.fx.formats.svg.svg.____ELEMENTES____;
+import org.eclipse.fx.formats.svg.svg.____ENUMS____;
 import org.eclipse.fx.formats.svg.svg.*;
 
 /**
@@ -3677,6 +3808,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getSvgTextElement_TextContent() {
+		return (EAttribute)svgTextElementEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getSvgTspanElement() {
 		return svgTspanElementEClass;
 	}
@@ -7048,6 +7188,7 @@
 		createEAttribute(svgTextElementEClass, SVG_TEXT_ELEMENT__DY);
 		createEAttribute(svgTextElementEClass, SVG_TEXT_ELEMENT__ROTATE);
 		createEAttribute(svgTextElementEClass, SVG_TEXT_ELEMENT__TEXT_LENGTH);
+		createEAttribute(svgTextElementEClass, SVG_TEXT_ELEMENT__TEXT_CONTENT);
 
 		svgTspanElementEClass = createEClass(SVG_TSPAN_ELEMENT);
 		createEAttribute(svgTspanElementEClass, SVG_TSPAN_ELEMENT__CLASS);
@@ -8584,6 +8725,7 @@
 		initEAttribute(getSvgTextElement_Dy(), this.getListOfLengths(), "dy", null, 0, 1, SvgTextElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getSvgTextElement_Rotate(), this.getListOfNumbers(), "rotate", null, 0, 1, SvgTextElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getSvgTextElement_TextLength(), this.getLength(), "textLength", null, 0, 1, SvgTextElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getSvgTextElement_TextContent(), ecorePackage.getEString(), "textContent", null, 0, 1, SvgTextElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(svgTspanElementEClass, SvgTspanElement.class, "SvgTspanElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getSvgTspanElement_Class(), ecorePackage.getEString(), "class", null, 0, 1, SvgTspanElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPathElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPathElementImpl.java
index f9102c9..e846727 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPathElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPathElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPathElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPathElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -152,7 +153,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPathElementImpl#getD <em>D</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPathElementImpl#getPathLength <em>Path Length</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPatternElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPatternElementImpl.java
index ff39f9b..ce62f96 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPatternElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPatternElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPatternElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPatternElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
@@ -156,7 +157,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPatternElementImpl#getPatternContentUnits <em>Pattern Content Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPatternElementImpl#getPatternTransform <em>Pattern Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolygonElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolygonElementImpl.java
index 4ef1968..df1a238 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolygonElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolygonElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolygonElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolygonElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -152,7 +153,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolygonElementImpl#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolygonElementImpl#getPoints <em>Points</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolylineElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolylineElementImpl.java
index 84630ff..87f2fad 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolylineElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgPolylineElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolylineElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolylineElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -152,7 +153,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolylineElementImpl#getTransform <em>Transform</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgPolylineElementImpl#getPoints <em>Points</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRadialGradientElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRadialGradientElementImpl.java
index 1e69cf8..4367b8e 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRadialGradientElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRadialGradientElementImpl.java
@@ -67,6 +67,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRadialGradientElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRadialGradientElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -152,7 +153,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRadialGradientElementImpl#getGradientUnits <em>Gradient Units</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRadialGradientElementImpl#getGradientTransform <em>Gradient Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRectElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRectElementImpl.java
index a494f30..40618a8 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRectElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgRectElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRectElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRectElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -157,7 +158,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRectElementImpl#getRx <em>Rx</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgRectElementImpl#getRy <em>Ry</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgStopElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgStopElementImpl.java
index 97598ba..ce1a9a2 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgStopElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgStopElementImpl.java
@@ -63,6 +63,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgStopElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgStopElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -132,7 +133,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgStopElementImpl#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgStopElementImpl#getOffset <em>Offset</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSvgElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSvgElementImpl.java
index 6763d45..c424dc6 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSvgElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSvgElementImpl.java
@@ -69,6 +69,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSvgElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSvgElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
@@ -169,7 +170,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSvgElementImpl#getContentStyleType <em>Content Style Type</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSvgElementImpl#getStyleSheet <em>Style Sheet</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSwitchElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSwitchElementImpl.java
index e645c12..3486b4b 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSwitchElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSwitchElementImpl.java
@@ -66,6 +66,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSwitchElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSwitchElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
@@ -149,7 +150,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSwitchElementImpl#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSwitchElementImpl#getTransform <em>Transform</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSymbolElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSymbolElementImpl.java
index 68d03f7..c34635d 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSymbolElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgSymbolElementImpl.java
@@ -66,6 +66,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSymbolElementImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSymbolElementImpl#getId <em>Id</em>}</li>
@@ -147,7 +148,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSymbolElementImpl#getViewBox <em>View Box</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgSymbolElementImpl#getPreserveAspectRatio <em>Preserve Aspect Ratio</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextElementImpl.java
index e294bca..145c796 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -157,8 +158,8 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getDy <em>Dy</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getRotate <em>Rotate</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getTextLength <em>Text Length</em>}</li>
+ *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextElementImpl#getTextContent <em>Text Content</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -1914,6 +1915,26 @@
 	protected String textLength = TEXT_LENGTH_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getTextContent() <em>Text Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTextContent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TEXT_CONTENT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTextContent() <em>Text Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTextContent()
+	 * @generated
+	 * @ordered
+	 */
+	protected String textContent = TEXT_CONTENT_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -3776,6 +3797,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public String getTextContent() {
+		return textContent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTextContent(String newTextContent) {
+		String oldTextContent = textContent;
+		textContent = newTextContent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SvgPackage.SVG_TEXT_ELEMENT__TEXT_CONTENT, oldTextContent, textContent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
@@ -3969,6 +4011,8 @@
 				return getRotate();
 			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_LENGTH:
 				return getTextLength();
+			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_CONTENT:
+				return getTextContent();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -4247,6 +4291,9 @@
 			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_LENGTH:
 				setTextLength((String)newValue);
 				return;
+			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_CONTENT:
+				setTextContent((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -4523,6 +4570,9 @@
 			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_LENGTH:
 				setTextLength(TEXT_LENGTH_EDEFAULT);
 				return;
+			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_CONTENT:
+				setTextContent(TEXT_CONTENT_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -4711,6 +4761,8 @@
 				return ROTATE_EDEFAULT == null ? rotate != null : !ROTATE_EDEFAULT.equals(rotate);
 			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_LENGTH:
 				return TEXT_LENGTH_EDEFAULT == null ? textLength != null : !TEXT_LENGTH_EDEFAULT.equals(textLength);
+			case SvgPackage.SVG_TEXT_ELEMENT__TEXT_CONTENT:
+				return TEXT_CONTENT_EDEFAULT == null ? textContent != null : !TEXT_CONTENT_EDEFAULT.equals(textContent);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -5143,6 +5195,8 @@
 		result.append(rotate);
 		result.append(", textLength: ");
 		result.append(textLength);
+		result.append(", textContent: ");
+		result.append(textContent);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextPathElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextPathElementImpl.java
index 3bf800a..f8c4c45 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextPathElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTextPathElementImpl.java
@@ -70,6 +70,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextPathElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextPathElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -163,7 +164,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextPathElementImpl#getMethod <em>Method</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTextPathElementImpl#getSpacing <em>Spacing</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTitleElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTitleElementImpl.java
index ac10c88..d5ea7c2 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTitleElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTitleElementImpl.java
@@ -39,6 +39,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTitleElementImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTitleElementImpl#getXml__base <em>Xml base</em>}</li>
@@ -48,7 +49,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTitleElementImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTitleElementImpl#getStyle <em>Style</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTrefElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTrefElementImpl.java
index 3479575..b930149 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTrefElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTrefElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTrefElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTrefElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -158,7 +159,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTrefElementImpl#getStyle <em>Style</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTrefElementImpl#getExternalResourcesRequired <em>External Resources Required</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTspanElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTspanElementImpl.java
index 2a4cfc0..995fada 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTspanElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgTspanElementImpl.java
@@ -68,6 +68,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -157,7 +158,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl#getTextLength <em>Text Length</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgTspanElementImpl#getLengthAdjust <em>Length Adjust</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgUseElementImpl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgUseElementImpl.java
index 33bd562..a9a00bd 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgUseElementImpl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/SvgUseElementImpl.java
@@ -69,6 +69,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgUseElementImpl#getRequiredFeatures <em>Required Features</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgUseElementImpl#getRequiredExtensions <em>Required Extensions</em>}</li>
@@ -164,7 +165,6 @@
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgUseElementImpl#getX <em>X</em>}</li>
  *   <li>{@link org.eclipse.fx.formats.svg.svg.impl.SvgUseElementImpl#getY <em>Y</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ATTRIBUTES____Impl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ATTRIBUTES____Impl.java
index 50e546a..e99c25c 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ATTRIBUTES____Impl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ATTRIBUTES____Impl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>ATTRIBUTES </b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____DATATYPES____Impl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____DATATYPES____Impl.java
index df777e3..ae8c440 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____DATATYPES____Impl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____DATATYPES____Impl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>DATATYPES </b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ELEMENTES____Impl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ELEMENTES____Impl.java
index 8fec8c7..54fc2b0 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ELEMENTES____Impl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ELEMENTES____Impl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>ELEMENTES </b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ENUMS____Impl.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ENUMS____Impl.java
index 44b68e8..6551809 100755
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ENUMS____Impl.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/impl/____ENUMS____Impl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>ENUMS </b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgAdapterFactory.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgAdapterFactory.java
old mode 100755
new mode 100644
index 51b036e..81ff84f
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgAdapterFactory.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgAdapterFactory.java
@@ -1,1724 +1,1632 @@
-/*******************************************************************************
- * Copyright (c) 2012 BestSolution.at and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.formats.svg.svg.util;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.fx.formats.svg.svg.AnimationElement;
-import org.eclipse.fx.formats.svg.svg.BasicShapeElement;
-import org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes;
-import org.eclipse.fx.formats.svg.svg.ContainerElement;
-import org.eclipse.fx.formats.svg.svg.ContentElement;
-import org.eclipse.fx.formats.svg.svg.CoreAttributes;
-import org.eclipse.fx.formats.svg.svg.DescriptiveElement;
-import org.eclipse.fx.formats.svg.svg.DocumentEventAttributes;
-import org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes;
-import org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement;
-import org.eclipse.fx.formats.svg.svg.GradientElement;
-import org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes;
-import org.eclipse.fx.formats.svg.svg.GraphicsElement;
-import org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement;
-import org.eclipse.fx.formats.svg.svg.LightSourceElement;
-import org.eclipse.fx.formats.svg.svg.PresentationAttributes;
-import org.eclipse.fx.formats.svg.svg.ShapeElement;
-import org.eclipse.fx.formats.svg.svg.StructuralElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement;
-import org.eclipse.fx.formats.svg.svg.SvgAnimateElement;
-import org.eclipse.fx.formats.svg.svg.SvgCircleElement;
-import org.eclipse.fx.formats.svg.svg.SvgClipPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgColorProfileElement;
-import org.eclipse.fx.formats.svg.svg.SvgDefsElement;
-import org.eclipse.fx.formats.svg.svg.SvgDescElement;
-import org.eclipse.fx.formats.svg.svg.SvgElement;
-import org.eclipse.fx.formats.svg.svg.SvgEllipseElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeBlendElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFloodElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeImageElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMergeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement;
-import org.eclipse.fx.formats.svg.svg.SvgFePointLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeTileElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement;
-import org.eclipse.fx.formats.svg.svg.SvgFilterElement;
-import org.eclipse.fx.formats.svg.svg.SvgGElement;
-import org.eclipse.fx.formats.svg.svg.SvgImageElement;
-import org.eclipse.fx.formats.svg.svg.SvgLineElement;
-import org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement;
-import org.eclipse.fx.formats.svg.svg.SvgMarkerElement;
-import org.eclipse.fx.formats.svg.svg.SvgMaskElement;
-import org.eclipse.fx.formats.svg.svg.SvgMetadataElement;
-import org.eclipse.fx.formats.svg.svg.SvgPackage;
-import org.eclipse.fx.formats.svg.svg.SvgPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgPatternElement;
-import org.eclipse.fx.formats.svg.svg.SvgPolygonElement;
-import org.eclipse.fx.formats.svg.svg.SvgPolylineElement;
-import org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement;
-import org.eclipse.fx.formats.svg.svg.SvgRectElement;
-import org.eclipse.fx.formats.svg.svg.SvgStopElement;
-import org.eclipse.fx.formats.svg.svg.SvgSvgElement;
-import org.eclipse.fx.formats.svg.svg.SvgSwitchElement;
-import org.eclipse.fx.formats.svg.svg.SvgSymbolElement;
-import org.eclipse.fx.formats.svg.svg.SvgTextElement;
-import org.eclipse.fx.formats.svg.svg.SvgTextPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgTitleElement;
-import org.eclipse.fx.formats.svg.svg.SvgTrefElement;
-import org.eclipse.fx.formats.svg.svg.SvgTspanElement;
-import org.eclipse.fx.formats.svg.svg.SvgUseElement;
-import org.eclipse.fx.formats.svg.svg.TextContentChildElement;
-import org.eclipse.fx.formats.svg.svg.TextContentElement;
-import org.eclipse.fx.formats.svg.svg.XLinkAttributes;
-import org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____;
-import org.eclipse.fx.formats.svg.svg.____DATATYPES____;
-import org.eclipse.fx.formats.svg.svg.____ELEMENTES____;
-import org.eclipse.fx.formats.svg.svg.____ENUMS____;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Adapter Factory</b> for the model.
- * It provides an adapter <code>createXXX</code> method for each class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.fx.formats.svg.svg.SvgPackage
- * @generated
- */
-public class SvgAdapterFactory extends AdapterFactoryImpl {
-	/**
-	 * The cached model package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static SvgPackage modelPackage;
-
-	/**
-	 * Creates an instance of the adapter factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public SvgAdapterFactory() {
-		if (modelPackage == null) {
-			modelPackage = SvgPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Returns whether this factory is applicable for the type of the object.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
-	 * <!-- end-user-doc -->
-	 * @return whether this factory is applicable for the type of the object.
-	 * @generated
-	 */
-	@Override
-	public boolean isFactoryForType(Object object) {
-		if (object == modelPackage) {
-			return true;
-		}
-		if (object instanceof EObject) {
-			return ((EObject)object).eClass().getEPackage() == modelPackage;
-		}
-		return false;
-	}
-
-	/**
-	 * The switch that delegates to the <code>createXXX</code> methods.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected SvgSwitch<@Nullable Adapter> modelSwitch =
-		new SvgSwitch<@Nullable Adapter>() {
-			@Override
-			public <T extends SvgElement> Adapter caseContentElement(ContentElement<T> object) {
-				return createContentElementAdapter();
-			}
-			@Override
-			public <T extends SvgElement> Adapter caseContainerElement(ContainerElement<T> object) {
-				return createContainerElementAdapter();
-			}
-			@Override
-			public Adapter caseStructuralElement(StructuralElement object) {
-				return createStructuralElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgElement(SvgElement object) {
-				return createSvgElementAdapter();
-			}
-			@Override
-			public Adapter caseDescriptiveElement(DescriptiveElement object) {
-				return createDescriptiveElementAdapter();
-			}
-			@Override
-			public Adapter caseGraphicsElement(GraphicsElement object) {
-				return createGraphicsElementAdapter();
-			}
-			@Override
-			public Adapter caseGraphicsReferencingElement(GraphicsReferencingElement object) {
-				return createGraphicsReferencingElementAdapter();
-			}
-			@Override
-			public Adapter caseShapeElement(ShapeElement object) {
-				return createShapeElementAdapter();
-			}
-			@Override
-			public Adapter caseBasicShapeElement(BasicShapeElement object) {
-				return createBasicShapeElementAdapter();
-			}
-			@Override
-			public Adapter caseTextContentElement(TextContentElement object) {
-				return createTextContentElementAdapter();
-			}
-			@Override
-			public Adapter caseTextContentChildElement(TextContentChildElement object) {
-				return createTextContentChildElementAdapter();
-			}
-			@Override
-			public Adapter caseGradientElement(GradientElement object) {
-				return createGradientElementAdapter();
-			}
-			@Override
-			public Adapter caseLightSourceElement(LightSourceElement object) {
-				return createLightSourceElementAdapter();
-			}
-			@Override
-			public Adapter caseFilterPrimitiveElement(FilterPrimitiveElement object) {
-				return createFilterPrimitiveElementAdapter();
-			}
-			@Override
-			public Adapter caseAnimationElement(AnimationElement object) {
-				return createAnimationElementAdapter();
-			}
-			@Override
-			public Adapter case____ENUMS____(____ENUMS____ object) {
-				return create____ENUMS____Adapter();
-			}
-			@Override
-			public Adapter case____DATATYPES____(____DATATYPES____ object) {
-				return create____DATATYPES____Adapter();
-			}
-			@Override
-			public Adapter case____ATTRIBUTES____(____ATTRIBUTES____ object) {
-				return create____ATTRIBUTES____Adapter();
-			}
-			@Override
-			public Adapter caseConditionalProcessingAttributes(ConditionalProcessingAttributes object) {
-				return createConditionalProcessingAttributesAdapter();
-			}
-			@Override
-			public Adapter caseCoreAttributes(CoreAttributes object) {
-				return createCoreAttributesAdapter();
-			}
-			@Override
-			public Adapter caseDocumentEventAttributes(DocumentEventAttributes object) {
-				return createDocumentEventAttributesAdapter();
-			}
-			@Override
-			public Adapter caseGraphicalEventAttributes(GraphicalEventAttributes object) {
-				return createGraphicalEventAttributesAdapter();
-			}
-			@Override
-			public Adapter casePresentationAttributes(PresentationAttributes object) {
-				return createPresentationAttributesAdapter();
-			}
-			@Override
-			public Adapter caseXLinkAttributes(XLinkAttributes object) {
-				return createXLinkAttributesAdapter();
-			}
-			@Override
-			public Adapter caseFilterPrimitiveAttributes(FilterPrimitiveAttributes object) {
-				return createFilterPrimitiveAttributesAdapter();
-			}
-			@Override
-			public Adapter case____ELEMENTES____(____ELEMENTES____ object) {
-				return create____ELEMENTES____Adapter();
-			}
-			@Override
-			public Adapter caseSvgSvgElement(SvgSvgElement object) {
-				return createSvgSvgElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgGElement(SvgGElement object) {
-				return createSvgGElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgDefsElement(SvgDefsElement object) {
-				return createSvgDefsElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgDescElement(SvgDescElement object) {
-				return createSvgDescElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgTitleElement(SvgTitleElement object) {
-				return createSvgTitleElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgSymbolElement(SvgSymbolElement object) {
-				return createSvgSymbolElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgUseElement(SvgUseElement object) {
-				return createSvgUseElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgImageElement(SvgImageElement object) {
-				return createSvgImageElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgSwitchElement(SvgSwitchElement object) {
-				return createSvgSwitchElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgPathElement(SvgPathElement object) {
-				return createSvgPathElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgRectElement(SvgRectElement object) {
-				return createSvgRectElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgCircleElement(SvgCircleElement object) {
-				return createSvgCircleElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgEllipseElement(SvgEllipseElement object) {
-				return createSvgEllipseElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgLineElement(SvgLineElement object) {
-				return createSvgLineElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgPolylineElement(SvgPolylineElement object) {
-				return createSvgPolylineElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgPolygonElement(SvgPolygonElement object) {
-				return createSvgPolygonElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgTextElement(SvgTextElement object) {
-				return createSvgTextElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgTspanElement(SvgTspanElement object) {
-				return createSvgTspanElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgTrefElement(SvgTrefElement object) {
-				return createSvgTrefElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgTextPathElement(SvgTextPathElement object) {
-				return createSvgTextPathElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgAltGlyphElement(SvgAltGlyphElement object) {
-				return createSvgAltGlyphElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgAltGlyphDefElement(SvgAltGlyphDefElement object) {
-				return createSvgAltGlyphDefElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgAltGlyphItemElement(SvgAltGlyphItemElement object) {
-				return createSvgAltGlyphItemElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgAltGlyphRefElement(SvgAltGlyphRefElement object) {
-				return createSvgAltGlyphRefElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgMarkerElement(SvgMarkerElement object) {
-				return createSvgMarkerElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgColorProfileElement(SvgColorProfileElement object) {
-				return createSvgColorProfileElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgLinearGradientElement(SvgLinearGradientElement object) {
-				return createSvgLinearGradientElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgRadialGradientElement(SvgRadialGradientElement object) {
-				return createSvgRadialGradientElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgStopElement(SvgStopElement object) {
-				return createSvgStopElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgPatternElement(SvgPatternElement object) {
-				return createSvgPatternElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgClipPathElement(SvgClipPathElement object) {
-				return createSvgClipPathElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgMaskElement(SvgMaskElement object) {
-				return createSvgMaskElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFilterElement(SvgFilterElement object) {
-				return createSvgFilterElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeDistantLightElement(SvgFeDistantLightElement object) {
-				return createSvgFeDistantLightElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFePointLightElement(SvgFePointLightElement object) {
-				return createSvgFePointLightElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeSpotLightElement(SvgFeSpotLightElement object) {
-				return createSvgFeSpotLightElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeBlendElement(SvgFeBlendElement object) {
-				return createSvgFeBlendElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeColorMatrixElement(SvgFeColorMatrixElement object) {
-				return createSvgFeColorMatrixElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeComponentTransferElement(SvgFeComponentTransferElement object) {
-				return createSvgFeComponentTransferElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeFuncRElement(SvgFeFuncRElement object) {
-				return createSvgFeFuncRElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeFuncGElement(SvgFeFuncGElement object) {
-				return createSvgFeFuncGElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeFuncBElement(SvgFeFuncBElement object) {
-				return createSvgFeFuncBElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeFuncAElement(SvgFeFuncAElement object) {
-				return createSvgFeFuncAElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeCompositeElement(SvgFeCompositeElement object) {
-				return createSvgFeCompositeElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeConvolveMatrixElement(SvgFeConvolveMatrixElement object) {
-				return createSvgFeConvolveMatrixElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeDiffuseLightingElement(SvgFeDiffuseLightingElement object) {
-				return createSvgFeDiffuseLightingElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeDisplacementMapElement(SvgFeDisplacementMapElement object) {
-				return createSvgFeDisplacementMapElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeFloodElement(SvgFeFloodElement object) {
-				return createSvgFeFloodElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeGaussianBlurElement(SvgFeGaussianBlurElement object) {
-				return createSvgFeGaussianBlurElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeImageElement(SvgFeImageElement object) {
-				return createSvgFeImageElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeMergeElement(SvgFeMergeElement object) {
-				return createSvgFeMergeElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeMergeNodeElement(SvgFeMergeNodeElement object) {
-				return createSvgFeMergeNodeElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeMorphologyElement(SvgFeMorphologyElement object) {
-				return createSvgFeMorphologyElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeOffsetElement(SvgFeOffsetElement object) {
-				return createSvgFeOffsetElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeSpecularLightingElement(SvgFeSpecularLightingElement object) {
-				return createSvgFeSpecularLightingElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeTileElement(SvgFeTileElement object) {
-				return createSvgFeTileElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgFeTurbulenceElement(SvgFeTurbulenceElement object) {
-				return createSvgFeTurbulenceElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgAnimateElement(SvgAnimateElement object) {
-				return createSvgAnimateElementAdapter();
-			}
-			@Override
-			public Adapter caseSvgMetadataElement(SvgMetadataElement object) {
-				return createSvgMetadataElementAdapter();
-			}
-			@Override
-			public Adapter defaultCase(EObject object) {
-				return createEObjectAdapter();
-			}
-		};
-
-	/**
-	 * Creates an adapter for the <code>target</code>.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param target the object to adapt.
-	 * @return the adapter for the <code>target</code>.
-	 * @generated
-	 */
-	@Override
-	public Adapter createAdapter(Notifier target) {
-		return modelSwitch.doSwitch((EObject)target);
-	}
-
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ContentElement <em>Content Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.ContentElement
-	 * @generated
-	 */
-	public Adapter createContentElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ContainerElement <em>Container Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.ContainerElement
-	 * @generated
-	 */
-	public Adapter createContainerElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.StructuralElement <em>Structural Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.StructuralElement
-	 * @generated
-	 */
-	public Adapter createStructuralElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgElement <em>Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgElement
-	 * @generated
-	 */
-	public Adapter createSvgElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.DescriptiveElement <em>Descriptive Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.DescriptiveElement
-	 * @generated
-	 */
-	public Adapter createDescriptiveElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicsElement <em>Graphics Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.GraphicsElement
-	 * @generated
-	 */
-	public Adapter createGraphicsElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement <em>Graphics Referencing Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement
-	 * @generated
-	 */
-	public Adapter createGraphicsReferencingElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ShapeElement <em>Shape Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.ShapeElement
-	 * @generated
-	 */
-	public Adapter createShapeElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.BasicShapeElement <em>Basic Shape Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.BasicShapeElement
-	 * @generated
-	 */
-	public Adapter createBasicShapeElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.TextContentElement <em>Text Content Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.TextContentElement
-	 * @generated
-	 */
-	public Adapter createTextContentElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.TextContentChildElement <em>Text Content Child Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.TextContentChildElement
-	 * @generated
-	 */
-	public Adapter createTextContentChildElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GradientElement <em>Gradient Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.GradientElement
-	 * @generated
-	 */
-	public Adapter createGradientElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.LightSourceElement <em>Light Source Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.LightSourceElement
-	 * @generated
-	 */
-	public Adapter createLightSourceElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement <em>Filter Primitive Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement
-	 * @generated
-	 */
-	public Adapter createFilterPrimitiveElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.AnimationElement <em>Animation Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.AnimationElement
-	 * @generated
-	 */
-	public Adapter createAnimationElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ENUMS____ <em>ENUMS </em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.____ENUMS____
-	 * @generated
-	 */
-	public Adapter create____ENUMS____Adapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____DATATYPES____ <em>DATATYPES </em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.____DATATYPES____
-	 * @generated
-	 */
-	public Adapter create____DATATYPES____Adapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____ <em>ATTRIBUTES </em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____
-	 * @generated
-	 */
-	public Adapter create____ATTRIBUTES____Adapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes <em>Conditional Processing Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes
-	 * @generated
-	 */
-	public Adapter createConditionalProcessingAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.CoreAttributes <em>Core Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.CoreAttributes
-	 * @generated
-	 */
-	public Adapter createCoreAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes <em>Document Event Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.DocumentEventAttributes
-	 * @generated
-	 */
-	public Adapter createDocumentEventAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes <em>Graphical Event Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes
-	 * @generated
-	 */
-	public Adapter createGraphicalEventAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes <em>Presentation Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.PresentationAttributes
-	 * @generated
-	 */
-	public Adapter createPresentationAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes <em>XLink Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.XLinkAttributes
-	 * @generated
-	 */
-	public Adapter createXLinkAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes <em>Filter Primitive Attributes</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes
-	 * @generated
-	 */
-	public Adapter createFilterPrimitiveAttributesAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ELEMENTES____ <em>ELEMENTES </em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.____ELEMENTES____
-	 * @generated
-	 */
-	public Adapter create____ELEMENTES____Adapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement <em>Svg Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgSvgElement
-	 * @generated
-	 */
-	public Adapter createSvgSvgElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgGElement <em>GElement</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgGElement
-	 * @generated
-	 */
-	public Adapter createSvgGElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement <em>Defs Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgDefsElement
-	 * @generated
-	 */
-	public Adapter createSvgDefsElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgDescElement <em>Desc Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgDescElement
-	 * @generated
-	 */
-	public Adapter createSvgDescElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTitleElement <em>Title Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgTitleElement
-	 * @generated
-	 */
-	public Adapter createSvgTitleElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement <em>Symbol Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgSymbolElement
-	 * @generated
-	 */
-	public Adapter createSvgSymbolElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgUseElement <em>Use Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgUseElement
-	 * @generated
-	 */
-	public Adapter createSvgUseElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgImageElement <em>Image Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgImageElement
-	 * @generated
-	 */
-	public Adapter createSvgImageElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement <em>Switch Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgSwitchElement
-	 * @generated
-	 */
-	public Adapter createSvgSwitchElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPathElement <em>Path Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgPathElement
-	 * @generated
-	 */
-	public Adapter createSvgPathElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgRectElement <em>Rect Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgRectElement
-	 * @generated
-	 */
-	public Adapter createSvgRectElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement <em>Circle Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgCircleElement
-	 * @generated
-	 */
-	public Adapter createSvgCircleElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement <em>Ellipse Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgEllipseElement
-	 * @generated
-	 */
-	public Adapter createSvgEllipseElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgLineElement <em>Line Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgLineElement
-	 * @generated
-	 */
-	public Adapter createSvgLineElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement <em>Polyline Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgPolylineElement
-	 * @generated
-	 */
-	public Adapter createSvgPolylineElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement <em>Polygon Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgPolygonElement
-	 * @generated
-	 */
-	public Adapter createSvgPolygonElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTextElement <em>Text Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgTextElement
-	 * @generated
-	 */
-	public Adapter createSvgTextElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement <em>Tspan Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgTspanElement
-	 * @generated
-	 */
-	public Adapter createSvgTspanElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTrefElement <em>Tref Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgTrefElement
-	 * @generated
-	 */
-	public Adapter createSvgTrefElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement <em>Text Path Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgTextPathElement
-	 * @generated
-	 */
-	public Adapter createSvgTextPathElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement <em>Alt Glyph Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement
-	 * @generated
-	 */
-	public Adapter createSvgAltGlyphElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement <em>Alt Glyph Def Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement
-	 * @generated
-	 */
-	public Adapter createSvgAltGlyphDefElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement <em>Alt Glyph Item Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement
-	 * @generated
-	 */
-	public Adapter createSvgAltGlyphItemElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement <em>Alt Glyph Ref Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement
-	 * @generated
-	 */
-	public Adapter createSvgAltGlyphRefElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement <em>Marker Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgMarkerElement
-	 * @generated
-	 */
-	public Adapter createSvgMarkerElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgColorProfileElement <em>Color Profile Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgColorProfileElement
-	 * @generated
-	 */
-	public Adapter createSvgColorProfileElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement <em>Linear Gradient Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement
-	 * @generated
-	 */
-	public Adapter createSvgLinearGradientElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement <em>Radial Gradient Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement
-	 * @generated
-	 */
-	public Adapter createSvgRadialGradientElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgStopElement <em>Stop Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgStopElement
-	 * @generated
-	 */
-	public Adapter createSvgStopElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement <em>Pattern Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgPatternElement
-	 * @generated
-	 */
-	public Adapter createSvgPatternElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement <em>Clip Path Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgClipPathElement
-	 * @generated
-	 */
-	public Adapter createSvgClipPathElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement <em>Mask Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgMaskElement
-	 * @generated
-	 */
-	public Adapter createSvgMaskElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement <em>Filter Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFilterElement
-	 * @generated
-	 */
-	public Adapter createSvgFilterElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement <em>Fe Distant Light Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement
-	 * @generated
-	 */
-	public Adapter createSvgFeDistantLightElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFePointLightElement <em>Fe Point Light Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFePointLightElement
-	 * @generated
-	 */
-	public Adapter createSvgFePointLightElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement <em>Fe Spot Light Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement
-	 * @generated
-	 */
-	public Adapter createSvgFeSpotLightElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement <em>Fe Blend Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeBlendElement
-	 * @generated
-	 */
-	public Adapter createSvgFeBlendElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement <em>Fe Color Matrix Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement
-	 * @generated
-	 */
-	public Adapter createSvgFeColorMatrixElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement <em>Fe Component Transfer Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement
-	 * @generated
-	 */
-	public Adapter createSvgFeComponentTransferElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement <em>Fe Func RElement</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement
-	 * @generated
-	 */
-	public Adapter createSvgFeFuncRElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement <em>Fe Func GElement</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement
-	 * @generated
-	 */
-	public Adapter createSvgFeFuncGElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement <em>Fe Func BElement</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement
-	 * @generated
-	 */
-	public Adapter createSvgFeFuncBElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement <em>Fe Func AElement</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement
-	 * @generated
-	 */
-	public Adapter createSvgFeFuncAElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement <em>Fe Composite Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement
-	 * @generated
-	 */
-	public Adapter createSvgFeCompositeElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement <em>Fe Convolve Matrix Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement
-	 * @generated
-	 */
-	public Adapter createSvgFeConvolveMatrixElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement <em>Fe Diffuse Lighting Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement
-	 * @generated
-	 */
-	public Adapter createSvgFeDiffuseLightingElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement <em>Fe Displacement Map Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement
-	 * @generated
-	 */
-	public Adapter createSvgFeDisplacementMapElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFloodElement <em>Fe Flood Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFloodElement
-	 * @generated
-	 */
-	public Adapter createSvgFeFloodElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement <em>Fe Gaussian Blur Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement
-	 * @generated
-	 */
-	public Adapter createSvgFeGaussianBlurElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement <em>Fe Image Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeImageElement
-	 * @generated
-	 */
-	public Adapter createSvgFeImageElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeElement <em>Fe Merge Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMergeElement
-	 * @generated
-	 */
-	public Adapter createSvgFeMergeElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement <em>Fe Merge Node Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement
-	 * @generated
-	 */
-	public Adapter createSvgFeMergeNodeElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement <em>Fe Morphology Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement
-	 * @generated
-	 */
-	public Adapter createSvgFeMorphologyElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement <em>Fe Offset Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement
-	 * @generated
-	 */
-	public Adapter createSvgFeOffsetElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement <em>Fe Specular Lighting Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement
-	 * @generated
-	 */
-	public Adapter createSvgFeSpecularLightingElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeTileElement <em>Fe Tile Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeTileElement
-	 * @generated
-	 */
-	public Adapter createSvgFeTileElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement <em>Fe Turbulence Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement
-	 * @generated
-	 */
-	public Adapter createSvgFeTurbulenceElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAnimateElement <em>Animate Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgAnimateElement
-	 * @generated
-	 */
-	public Adapter createSvgAnimateElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMetadataElement <em>Metadata Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.fx.formats.svg.svg.SvgMetadataElement
-	 * @generated
-	 */
-	public Adapter createSvgMetadataElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for the default case.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @generated
-	 */
-	public Adapter createEObjectAdapter() {
-		return null;
-	}
-
-} //SvgAdapterFactory
+/**

+ */

+package org.eclipse.fx.formats.svg.svg.util;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.fx.formats.svg.svg.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.fx.formats.svg.svg.SvgPackage

+ * @generated

+ */

+public class SvgAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static SvgPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SvgAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = SvgPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SvgSwitch<Adapter> modelSwitch =

+		new SvgSwitch<Adapter>() {

+			@Override

+			public <T extends SvgElement> Adapter caseContentElement(ContentElement<T> object) {

+				return createContentElementAdapter();

+			}

+			@Override

+			public <T extends SvgElement> Adapter caseContainerElement(ContainerElement<T> object) {

+				return createContainerElementAdapter();

+			}

+			@Override

+			public Adapter caseStructuralElement(StructuralElement object) {

+				return createStructuralElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgElement(SvgElement object) {

+				return createSvgElementAdapter();

+			}

+			@Override

+			public Adapter caseDescriptiveElement(DescriptiveElement object) {

+				return createDescriptiveElementAdapter();

+			}

+			@Override

+			public Adapter caseGraphicsElement(GraphicsElement object) {

+				return createGraphicsElementAdapter();

+			}

+			@Override

+			public Adapter caseGraphicsReferencingElement(GraphicsReferencingElement object) {

+				return createGraphicsReferencingElementAdapter();

+			}

+			@Override

+			public Adapter caseShapeElement(ShapeElement object) {

+				return createShapeElementAdapter();

+			}

+			@Override

+			public Adapter caseBasicShapeElement(BasicShapeElement object) {

+				return createBasicShapeElementAdapter();

+			}

+			@Override

+			public Adapter caseTextContentElement(TextContentElement object) {

+				return createTextContentElementAdapter();

+			}

+			@Override

+			public Adapter caseTextContentChildElement(TextContentChildElement object) {

+				return createTextContentChildElementAdapter();

+			}

+			@Override

+			public Adapter caseGradientElement(GradientElement object) {

+				return createGradientElementAdapter();

+			}

+			@Override

+			public Adapter caseLightSourceElement(LightSourceElement object) {

+				return createLightSourceElementAdapter();

+			}

+			@Override

+			public Adapter caseFilterPrimitiveElement(FilterPrimitiveElement object) {

+				return createFilterPrimitiveElementAdapter();

+			}

+			@Override

+			public Adapter caseAnimationElement(AnimationElement object) {

+				return createAnimationElementAdapter();

+			}

+			@Override

+			public Adapter case____ENUMS____(____ENUMS____ object) {

+				return create____ENUMS____Adapter();

+			}

+			@Override

+			public Adapter case____DATATYPES____(____DATATYPES____ object) {

+				return create____DATATYPES____Adapter();

+			}

+			@Override

+			public Adapter case____ATTRIBUTES____(____ATTRIBUTES____ object) {

+				return create____ATTRIBUTES____Adapter();

+			}

+			@Override

+			public Adapter caseConditionalProcessingAttributes(ConditionalProcessingAttributes object) {

+				return createConditionalProcessingAttributesAdapter();

+			}

+			@Override

+			public Adapter caseCoreAttributes(CoreAttributes object) {

+				return createCoreAttributesAdapter();

+			}

+			@Override

+			public Adapter caseDocumentEventAttributes(DocumentEventAttributes object) {

+				return createDocumentEventAttributesAdapter();

+			}

+			@Override

+			public Adapter caseGraphicalEventAttributes(GraphicalEventAttributes object) {

+				return createGraphicalEventAttributesAdapter();

+			}

+			@Override

+			public Adapter casePresentationAttributes(PresentationAttributes object) {

+				return createPresentationAttributesAdapter();

+			}

+			@Override

+			public Adapter caseXLinkAttributes(XLinkAttributes object) {

+				return createXLinkAttributesAdapter();

+			}

+			@Override

+			public Adapter caseFilterPrimitiveAttributes(FilterPrimitiveAttributes object) {

+				return createFilterPrimitiveAttributesAdapter();

+			}

+			@Override

+			public Adapter case____ELEMENTES____(____ELEMENTES____ object) {

+				return create____ELEMENTES____Adapter();

+			}

+			@Override

+			public Adapter caseSvgSvgElement(SvgSvgElement object) {

+				return createSvgSvgElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgGElement(SvgGElement object) {

+				return createSvgGElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgDefsElement(SvgDefsElement object) {

+				return createSvgDefsElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgDescElement(SvgDescElement object) {

+				return createSvgDescElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgTitleElement(SvgTitleElement object) {

+				return createSvgTitleElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgSymbolElement(SvgSymbolElement object) {

+				return createSvgSymbolElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgUseElement(SvgUseElement object) {

+				return createSvgUseElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgImageElement(SvgImageElement object) {

+				return createSvgImageElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgSwitchElement(SvgSwitchElement object) {

+				return createSvgSwitchElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgPathElement(SvgPathElement object) {

+				return createSvgPathElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgRectElement(SvgRectElement object) {

+				return createSvgRectElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgCircleElement(SvgCircleElement object) {

+				return createSvgCircleElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgEllipseElement(SvgEllipseElement object) {

+				return createSvgEllipseElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgLineElement(SvgLineElement object) {

+				return createSvgLineElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgPolylineElement(SvgPolylineElement object) {

+				return createSvgPolylineElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgPolygonElement(SvgPolygonElement object) {

+				return createSvgPolygonElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgTextElement(SvgTextElement object) {

+				return createSvgTextElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgTspanElement(SvgTspanElement object) {

+				return createSvgTspanElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgTrefElement(SvgTrefElement object) {

+				return createSvgTrefElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgTextPathElement(SvgTextPathElement object) {

+				return createSvgTextPathElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgAltGlyphElement(SvgAltGlyphElement object) {

+				return createSvgAltGlyphElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgAltGlyphDefElement(SvgAltGlyphDefElement object) {

+				return createSvgAltGlyphDefElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgAltGlyphItemElement(SvgAltGlyphItemElement object) {

+				return createSvgAltGlyphItemElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgAltGlyphRefElement(SvgAltGlyphRefElement object) {

+				return createSvgAltGlyphRefElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgMarkerElement(SvgMarkerElement object) {

+				return createSvgMarkerElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgColorProfileElement(SvgColorProfileElement object) {

+				return createSvgColorProfileElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgLinearGradientElement(SvgLinearGradientElement object) {

+				return createSvgLinearGradientElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgRadialGradientElement(SvgRadialGradientElement object) {

+				return createSvgRadialGradientElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgStopElement(SvgStopElement object) {

+				return createSvgStopElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgPatternElement(SvgPatternElement object) {

+				return createSvgPatternElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgClipPathElement(SvgClipPathElement object) {

+				return createSvgClipPathElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgMaskElement(SvgMaskElement object) {

+				return createSvgMaskElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFilterElement(SvgFilterElement object) {

+				return createSvgFilterElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeDistantLightElement(SvgFeDistantLightElement object) {

+				return createSvgFeDistantLightElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFePointLightElement(SvgFePointLightElement object) {

+				return createSvgFePointLightElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeSpotLightElement(SvgFeSpotLightElement object) {

+				return createSvgFeSpotLightElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeBlendElement(SvgFeBlendElement object) {

+				return createSvgFeBlendElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeColorMatrixElement(SvgFeColorMatrixElement object) {

+				return createSvgFeColorMatrixElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeComponentTransferElement(SvgFeComponentTransferElement object) {

+				return createSvgFeComponentTransferElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeFuncRElement(SvgFeFuncRElement object) {

+				return createSvgFeFuncRElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeFuncGElement(SvgFeFuncGElement object) {

+				return createSvgFeFuncGElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeFuncBElement(SvgFeFuncBElement object) {

+				return createSvgFeFuncBElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeFuncAElement(SvgFeFuncAElement object) {

+				return createSvgFeFuncAElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeCompositeElement(SvgFeCompositeElement object) {

+				return createSvgFeCompositeElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeConvolveMatrixElement(SvgFeConvolveMatrixElement object) {

+				return createSvgFeConvolveMatrixElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeDiffuseLightingElement(SvgFeDiffuseLightingElement object) {

+				return createSvgFeDiffuseLightingElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeDisplacementMapElement(SvgFeDisplacementMapElement object) {

+				return createSvgFeDisplacementMapElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeFloodElement(SvgFeFloodElement object) {

+				return createSvgFeFloodElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeGaussianBlurElement(SvgFeGaussianBlurElement object) {

+				return createSvgFeGaussianBlurElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeImageElement(SvgFeImageElement object) {

+				return createSvgFeImageElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeMergeElement(SvgFeMergeElement object) {

+				return createSvgFeMergeElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeMergeNodeElement(SvgFeMergeNodeElement object) {

+				return createSvgFeMergeNodeElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeMorphologyElement(SvgFeMorphologyElement object) {

+				return createSvgFeMorphologyElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeOffsetElement(SvgFeOffsetElement object) {

+				return createSvgFeOffsetElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeSpecularLightingElement(SvgFeSpecularLightingElement object) {

+				return createSvgFeSpecularLightingElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeTileElement(SvgFeTileElement object) {

+				return createSvgFeTileElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgFeTurbulenceElement(SvgFeTurbulenceElement object) {

+				return createSvgFeTurbulenceElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgAnimateElement(SvgAnimateElement object) {

+				return createSvgAnimateElementAdapter();

+			}

+			@Override

+			public Adapter caseSvgMetadataElement(SvgMetadataElement object) {

+				return createSvgMetadataElementAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ContentElement <em>Content Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.ContentElement

+	 * @generated

+	 */

+	public Adapter createContentElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ContainerElement <em>Container Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.ContainerElement

+	 * @generated

+	 */

+	public Adapter createContainerElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.StructuralElement <em>Structural Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.StructuralElement

+	 * @generated

+	 */

+	public Adapter createStructuralElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgElement <em>Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgElement

+	 * @generated

+	 */

+	public Adapter createSvgElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.DescriptiveElement <em>Descriptive Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.DescriptiveElement

+	 * @generated

+	 */

+	public Adapter createDescriptiveElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicsElement <em>Graphics Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.GraphicsElement

+	 * @generated

+	 */

+	public Adapter createGraphicsElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement <em>Graphics Referencing Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement

+	 * @generated

+	 */

+	public Adapter createGraphicsReferencingElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ShapeElement <em>Shape Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.ShapeElement

+	 * @generated

+	 */

+	public Adapter createShapeElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.BasicShapeElement <em>Basic Shape Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.BasicShapeElement

+	 * @generated

+	 */

+	public Adapter createBasicShapeElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.TextContentElement <em>Text Content Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.TextContentElement

+	 * @generated

+	 */

+	public Adapter createTextContentElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.TextContentChildElement <em>Text Content Child Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.TextContentChildElement

+	 * @generated

+	 */

+	public Adapter createTextContentChildElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GradientElement <em>Gradient Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.GradientElement

+	 * @generated

+	 */

+	public Adapter createGradientElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.LightSourceElement <em>Light Source Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.LightSourceElement

+	 * @generated

+	 */

+	public Adapter createLightSourceElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement <em>Filter Primitive Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement

+	 * @generated

+	 */

+	public Adapter createFilterPrimitiveElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.AnimationElement <em>Animation Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.AnimationElement

+	 * @generated

+	 */

+	public Adapter createAnimationElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ENUMS____ <em>ENUMS </em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.____ENUMS____

+	 * @generated

+	 */

+	public Adapter create____ENUMS____Adapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____DATATYPES____ <em>DATATYPES </em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.____DATATYPES____

+	 * @generated

+	 */

+	public Adapter create____DATATYPES____Adapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____ <em>ATTRIBUTES </em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____

+	 * @generated

+	 */

+	public Adapter create____ATTRIBUTES____Adapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes <em>Conditional Processing Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes

+	 * @generated

+	 */

+	public Adapter createConditionalProcessingAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.CoreAttributes <em>Core Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.CoreAttributes

+	 * @generated

+	 */

+	public Adapter createCoreAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.DocumentEventAttributes <em>Document Event Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.DocumentEventAttributes

+	 * @generated

+	 */

+	public Adapter createDocumentEventAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes <em>Graphical Event Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes

+	 * @generated

+	 */

+	public Adapter createGraphicalEventAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.PresentationAttributes <em>Presentation Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.PresentationAttributes

+	 * @generated

+	 */

+	public Adapter createPresentationAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.XLinkAttributes <em>XLink Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.XLinkAttributes

+	 * @generated

+	 */

+	public Adapter createXLinkAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes <em>Filter Primitive Attributes</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes

+	 * @generated

+	 */

+	public Adapter createFilterPrimitiveAttributesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.____ELEMENTES____ <em>ELEMENTES </em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.____ELEMENTES____

+	 * @generated

+	 */

+	public Adapter create____ELEMENTES____Adapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSvgElement <em>Svg Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgSvgElement

+	 * @generated

+	 */

+	public Adapter createSvgSvgElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgGElement <em>GElement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgGElement

+	 * @generated

+	 */

+	public Adapter createSvgGElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgDefsElement <em>Defs Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgDefsElement

+	 * @generated

+	 */

+	public Adapter createSvgDefsElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgDescElement <em>Desc Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgDescElement

+	 * @generated

+	 */

+	public Adapter createSvgDescElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTitleElement <em>Title Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgTitleElement

+	 * @generated

+	 */

+	public Adapter createSvgTitleElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSymbolElement <em>Symbol Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgSymbolElement

+	 * @generated

+	 */

+	public Adapter createSvgSymbolElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgUseElement <em>Use Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgUseElement

+	 * @generated

+	 */

+	public Adapter createSvgUseElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgImageElement <em>Image Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgImageElement

+	 * @generated

+	 */

+	public Adapter createSvgImageElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgSwitchElement <em>Switch Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgSwitchElement

+	 * @generated

+	 */

+	public Adapter createSvgSwitchElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPathElement <em>Path Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgPathElement

+	 * @generated

+	 */

+	public Adapter createSvgPathElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgRectElement <em>Rect Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgRectElement

+	 * @generated

+	 */

+	public Adapter createSvgRectElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgCircleElement <em>Circle Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgCircleElement

+	 * @generated

+	 */

+	public Adapter createSvgCircleElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgEllipseElement <em>Ellipse Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgEllipseElement

+	 * @generated

+	 */

+	public Adapter createSvgEllipseElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgLineElement <em>Line Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgLineElement

+	 * @generated

+	 */

+	public Adapter createSvgLineElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPolylineElement <em>Polyline Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgPolylineElement

+	 * @generated

+	 */

+	public Adapter createSvgPolylineElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPolygonElement <em>Polygon Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgPolygonElement

+	 * @generated

+	 */

+	public Adapter createSvgPolygonElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTextElement <em>Text Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgTextElement

+	 * @generated

+	 */

+	public Adapter createSvgTextElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTspanElement <em>Tspan Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgTspanElement

+	 * @generated

+	 */

+	public Adapter createSvgTspanElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTrefElement <em>Tref Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgTrefElement

+	 * @generated

+	 */

+	public Adapter createSvgTrefElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgTextPathElement <em>Text Path Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgTextPathElement

+	 * @generated

+	 */

+	public Adapter createSvgTextPathElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement <em>Alt Glyph Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement

+	 * @generated

+	 */

+	public Adapter createSvgAltGlyphElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement <em>Alt Glyph Def Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement

+	 * @generated

+	 */

+	public Adapter createSvgAltGlyphDefElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement <em>Alt Glyph Item Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement

+	 * @generated

+	 */

+	public Adapter createSvgAltGlyphItemElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement <em>Alt Glyph Ref Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement

+	 * @generated

+	 */

+	public Adapter createSvgAltGlyphRefElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMarkerElement <em>Marker Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgMarkerElement

+	 * @generated

+	 */

+	public Adapter createSvgMarkerElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgColorProfileElement <em>Color Profile Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgColorProfileElement

+	 * @generated

+	 */

+	public Adapter createSvgColorProfileElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement <em>Linear Gradient Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement

+	 * @generated

+	 */

+	public Adapter createSvgLinearGradientElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement <em>Radial Gradient Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement

+	 * @generated

+	 */

+	public Adapter createSvgRadialGradientElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgStopElement <em>Stop Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgStopElement

+	 * @generated

+	 */

+	public Adapter createSvgStopElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgPatternElement <em>Pattern Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgPatternElement

+	 * @generated

+	 */

+	public Adapter createSvgPatternElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgClipPathElement <em>Clip Path Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgClipPathElement

+	 * @generated

+	 */

+	public Adapter createSvgClipPathElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMaskElement <em>Mask Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgMaskElement

+	 * @generated

+	 */

+	public Adapter createSvgMaskElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFilterElement <em>Filter Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFilterElement

+	 * @generated

+	 */

+	public Adapter createSvgFilterElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement <em>Fe Distant Light Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement

+	 * @generated

+	 */

+	public Adapter createSvgFeDistantLightElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFePointLightElement <em>Fe Point Light Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFePointLightElement

+	 * @generated

+	 */

+	public Adapter createSvgFePointLightElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement <em>Fe Spot Light Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement

+	 * @generated

+	 */

+	public Adapter createSvgFeSpotLightElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeBlendElement <em>Fe Blend Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeBlendElement

+	 * @generated

+	 */

+	public Adapter createSvgFeBlendElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement <em>Fe Color Matrix Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement

+	 * @generated

+	 */

+	public Adapter createSvgFeColorMatrixElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement <em>Fe Component Transfer Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement

+	 * @generated

+	 */

+	public Adapter createSvgFeComponentTransferElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement <em>Fe Func RElement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement

+	 * @generated

+	 */

+	public Adapter createSvgFeFuncRElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement <em>Fe Func GElement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement

+	 * @generated

+	 */

+	public Adapter createSvgFeFuncGElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement <em>Fe Func BElement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement

+	 * @generated

+	 */

+	public Adapter createSvgFeFuncBElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement <em>Fe Func AElement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement

+	 * @generated

+	 */

+	public Adapter createSvgFeFuncAElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement <em>Fe Composite Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement

+	 * @generated

+	 */

+	public Adapter createSvgFeCompositeElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement <em>Fe Convolve Matrix Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement

+	 * @generated

+	 */

+	public Adapter createSvgFeConvolveMatrixElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement <em>Fe Diffuse Lighting Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement

+	 * @generated

+	 */

+	public Adapter createSvgFeDiffuseLightingElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement <em>Fe Displacement Map Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement

+	 * @generated

+	 */

+	public Adapter createSvgFeDisplacementMapElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeFloodElement <em>Fe Flood Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeFloodElement

+	 * @generated

+	 */

+	public Adapter createSvgFeFloodElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement <em>Fe Gaussian Blur Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement

+	 * @generated

+	 */

+	public Adapter createSvgFeGaussianBlurElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeImageElement <em>Fe Image Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeImageElement

+	 * @generated

+	 */

+	public Adapter createSvgFeImageElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeElement <em>Fe Merge Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMergeElement

+	 * @generated

+	 */

+	public Adapter createSvgFeMergeElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement <em>Fe Merge Node Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement

+	 * @generated

+	 */

+	public Adapter createSvgFeMergeNodeElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement <em>Fe Morphology Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement

+	 * @generated

+	 */

+	public Adapter createSvgFeMorphologyElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement <em>Fe Offset Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement

+	 * @generated

+	 */

+	public Adapter createSvgFeOffsetElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement <em>Fe Specular Lighting Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement

+	 * @generated

+	 */

+	public Adapter createSvgFeSpecularLightingElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeTileElement <em>Fe Tile Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeTileElement

+	 * @generated

+	 */

+	public Adapter createSvgFeTileElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement <em>Fe Turbulence Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement

+	 * @generated

+	 */

+	public Adapter createSvgFeTurbulenceElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgAnimateElement <em>Animate Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgAnimateElement

+	 * @generated

+	 */

+	public Adapter createSvgAnimateElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.fx.formats.svg.svg.SvgMetadataElement <em>Metadata Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.fx.formats.svg.svg.SvgMetadataElement

+	 * @generated

+	 */

+	public Adapter createSvgMetadataElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //SvgAdapterFactory

diff --git a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgSwitch.java b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgSwitch.java
old mode 100755
new mode 100644
index ce60b7a..8a90bd1
--- a/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgSwitch.java
+++ b/bundles/runtime/org.eclipse.fx.formats.svg/src/org/eclipse/fx/formats/svg/svg/util/SvgSwitch.java
@@ -1,2311 +1,2219 @@
-/*******************************************************************************
- * Copyright (c) 2012 BestSolution.at and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.formats.svg.svg.util;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.util.Switch;
-import org.eclipse.fx.formats.svg.svg.AnimationElement;
-import org.eclipse.fx.formats.svg.svg.BasicShapeElement;
-import org.eclipse.fx.formats.svg.svg.ConditionalProcessingAttributes;
-import org.eclipse.fx.formats.svg.svg.ContainerElement;
-import org.eclipse.fx.formats.svg.svg.ContentElement;
-import org.eclipse.fx.formats.svg.svg.CoreAttributes;
-import org.eclipse.fx.formats.svg.svg.DescriptiveElement;
-import org.eclipse.fx.formats.svg.svg.DocumentEventAttributes;
-import org.eclipse.fx.formats.svg.svg.FilterPrimitiveAttributes;
-import org.eclipse.fx.formats.svg.svg.FilterPrimitiveElement;
-import org.eclipse.fx.formats.svg.svg.GradientElement;
-import org.eclipse.fx.formats.svg.svg.GraphicalEventAttributes;
-import org.eclipse.fx.formats.svg.svg.GraphicsElement;
-import org.eclipse.fx.formats.svg.svg.GraphicsReferencingElement;
-import org.eclipse.fx.formats.svg.svg.LightSourceElement;
-import org.eclipse.fx.formats.svg.svg.PresentationAttributes;
-import org.eclipse.fx.formats.svg.svg.ShapeElement;
-import org.eclipse.fx.formats.svg.svg.StructuralElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphDefElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphItemElement;
-import org.eclipse.fx.formats.svg.svg.SvgAltGlyphRefElement;
-import org.eclipse.fx.formats.svg.svg.SvgAnimateElement;
-import org.eclipse.fx.formats.svg.svg.SvgCircleElement;
-import org.eclipse.fx.formats.svg.svg.SvgClipPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgColorProfileElement;
-import org.eclipse.fx.formats.svg.svg.SvgDefsElement;
-import org.eclipse.fx.formats.svg.svg.SvgDescElement;
-import org.eclipse.fx.formats.svg.svg.SvgElement;
-import org.eclipse.fx.formats.svg.svg.SvgEllipseElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeBlendElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeColorMatrixElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeComponentTransferElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeCompositeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeConvolveMatrixElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDiffuseLightingElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDisplacementMapElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeDistantLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFloodElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncAElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncBElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncGElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeFuncRElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeGaussianBlurElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeImageElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMergeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMergeNodeElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeMorphologyElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeOffsetElement;
-import org.eclipse.fx.formats.svg.svg.SvgFePointLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeSpecularLightingElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeSpotLightElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeTileElement;
-import org.eclipse.fx.formats.svg.svg.SvgFeTurbulenceElement;
-import org.eclipse.fx.formats.svg.svg.SvgFilterElement;
-import org.eclipse.fx.formats.svg.svg.SvgGElement;
-import org.eclipse.fx.formats.svg.svg.SvgImageElement;
-import org.eclipse.fx.formats.svg.svg.SvgLineElement;
-import org.eclipse.fx.formats.svg.svg.SvgLinearGradientElement;
-import org.eclipse.fx.formats.svg.svg.SvgMarkerElement;
-import org.eclipse.fx.formats.svg.svg.SvgMaskElement;
-import org.eclipse.fx.formats.svg.svg.SvgMetadataElement;
-import org.eclipse.fx.formats.svg.svg.SvgPackage;
-import org.eclipse.fx.formats.svg.svg.SvgPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgPatternElement;
-import org.eclipse.fx.formats.svg.svg.SvgPolygonElement;
-import org.eclipse.fx.formats.svg.svg.SvgPolylineElement;
-import org.eclipse.fx.formats.svg.svg.SvgRadialGradientElement;
-import org.eclipse.fx.formats.svg.svg.SvgRectElement;
-import org.eclipse.fx.formats.svg.svg.SvgStopElement;
-import org.eclipse.fx.formats.svg.svg.SvgSvgElement;
-import org.eclipse.fx.formats.svg.svg.SvgSwitchElement;
-import org.eclipse.fx.formats.svg.svg.SvgSymbolElement;
-import org.eclipse.fx.formats.svg.svg.SvgTextElement;
-import org.eclipse.fx.formats.svg.svg.SvgTextPathElement;
-import org.eclipse.fx.formats.svg.svg.SvgTitleElement;
-import org.eclipse.fx.formats.svg.svg.SvgTrefElement;
-import org.eclipse.fx.formats.svg.svg.SvgTspanElement;
-import org.eclipse.fx.formats.svg.svg.SvgUseElement;
-import org.eclipse.fx.formats.svg.svg.TextContentChildElement;
-import org.eclipse.fx.formats.svg.svg.TextContentElement;
-import org.eclipse.fx.formats.svg.svg.XLinkAttributes;
-import org.eclipse.fx.formats.svg.svg.____ATTRIBUTES____;
-import org.eclipse.fx.formats.svg.svg.____DATATYPES____;
-import org.eclipse.fx.formats.svg.svg.____ELEMENTES____;
-import org.eclipse.fx.formats.svg.svg.____ENUMS____;
-import org.eclipse.jdt.annotation.Nullable;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Switch</b> for the model's inheritance hierarchy.
- * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
- * to invoke the <code>caseXXX</code> method for each class of the model,
- * starting with the actual class of the object
- * and proceeding up the inheritance hierarchy
- * until a non-null result is returned,
- * which is the result of the switch.
- * <!-- end-user-doc -->
- * @see org.eclipse.fx.formats.svg.svg.SvgPackage
- * @generated
- */
-public class SvgSwitch<@Nullable T1> extends Switch<T1> {
-	/**
-	 * The cached model package
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static SvgPackage modelPackage;
-
-	/**
-	 * Creates an instance of the switch.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public SvgSwitch() {
-		if (modelPackage == null) {
-			modelPackage = SvgPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Checks whether this is a switch for the given package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @parameter ePackage the package in question.
-	 * @return whether this is a switch for the given package.
-	 * @generated
-	 */
-	@Override
-	protected boolean isSwitchFor(EPackage ePackage) {
-		return ePackage == modelPackage;
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
-	@Override
-	protected T1 doSwitch(int classifierID, EObject theEObject) {
-		switch (classifierID) {
-			case SvgPackage.CONTENT_ELEMENT: {
-				ContentElement<?> contentElement = (ContentElement<?>)theEObject;
-				T1 result = caseContentElement(contentElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.CONTAINER_ELEMENT: {
-				ContainerElement<?> containerElement = (ContainerElement<?>)theEObject;
-				T1 result = caseContainerElement(containerElement);
-				if (result == null) result = caseContentElement(containerElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.STRUCTURAL_ELEMENT: {
-				StructuralElement structuralElement = (StructuralElement)theEObject;
-				T1 result = caseStructuralElement(structuralElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ELEMENT: {
-				SvgElement svgElement = (SvgElement)theEObject;
-				T1 result = caseSvgElement(svgElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.DESCRIPTIVE_ELEMENT: {
-				DescriptiveElement descriptiveElement = (DescriptiveElement)theEObject;
-				T1 result = caseDescriptiveElement(descriptiveElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.GRAPHICS_ELEMENT: {
-				GraphicsElement graphicsElement = (GraphicsElement)theEObject;
-				T1 result = caseGraphicsElement(graphicsElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.GRAPHICS_REFERENCING_ELEMENT: {
-				GraphicsReferencingElement graphicsReferencingElement = (GraphicsReferencingElement)theEObject;
-				T1 result = caseGraphicsReferencingElement(graphicsReferencingElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SHAPE_ELEMENT: {
-				ShapeElement shapeElement = (ShapeElement)theEObject;
-				T1 result = caseShapeElement(shapeElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.BASIC_SHAPE_ELEMENT: {
-				BasicShapeElement basicShapeElement = (BasicShapeElement)theEObject;
-				T1 result = caseBasicShapeElement(basicShapeElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.TEXT_CONTENT_ELEMENT: {
-				TextContentElement textContentElement = (TextContentElement)theEObject;
-				T1 result = caseTextContentElement(textContentElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.TEXT_CONTENT_CHILD_ELEMENT: {
-				TextContentChildElement textContentChildElement = (TextContentChildElement)theEObject;
-				T1 result = caseTextContentChildElement(textContentChildElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.GRADIENT_ELEMENT: {
-				GradientElement gradientElement = (GradientElement)theEObject;
-				T1 result = caseGradientElement(gradientElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.LIGHT_SOURCE_ELEMENT: {
-				LightSourceElement lightSourceElement = (LightSourceElement)theEObject;
-				T1 result = caseLightSourceElement(lightSourceElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.FILTER_PRIMITIVE_ELEMENT: {
-				FilterPrimitiveElement filterPrimitiveElement = (FilterPrimitiveElement)theEObject;
-				T1 result = caseFilterPrimitiveElement(filterPrimitiveElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.ANIMATION_ELEMENT: {
-				AnimationElement animationElement = (AnimationElement)theEObject;
-				T1 result = caseAnimationElement(animationElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage._ENUMS_: {
-				____ENUMS____ ____ENUMS____ = (____ENUMS____)theEObject;
-				T1 result = case____ENUMS____(____ENUMS____);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage._DATATYPES_: {
-				____DATATYPES____ ____DATATYPES____ = (____DATATYPES____)theEObject;
-				T1 result = case____DATATYPES____(____DATATYPES____);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage._ATTRIBUTES_: {
-				____ATTRIBUTES____ ____ATTRIBUTES____ = (____ATTRIBUTES____)theEObject;
-				T1 result = case____ATTRIBUTES____(____ATTRIBUTES____);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.CONDITIONAL_PROCESSING_ATTRIBUTES: {
-				ConditionalProcessingAttributes conditionalProcessingAttributes = (ConditionalProcessingAttributes)theEObject;
-				T1 result = caseConditionalProcessingAttributes(conditionalProcessingAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.CORE_ATTRIBUTES: {
-				CoreAttributes coreAttributes = (CoreAttributes)theEObject;
-				T1 result = caseCoreAttributes(coreAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.DOCUMENT_EVENT_ATTRIBUTES: {
-				DocumentEventAttributes documentEventAttributes = (DocumentEventAttributes)theEObject;
-				T1 result = caseDocumentEventAttributes(documentEventAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.GRAPHICAL_EVENT_ATTRIBUTES: {
-				GraphicalEventAttributes graphicalEventAttributes = (GraphicalEventAttributes)theEObject;
-				T1 result = caseGraphicalEventAttributes(graphicalEventAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.PRESENTATION_ATTRIBUTES: {
-				PresentationAttributes presentationAttributes = (PresentationAttributes)theEObject;
-				T1 result = casePresentationAttributes(presentationAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.XLINK_ATTRIBUTES: {
-				XLinkAttributes xLinkAttributes = (XLinkAttributes)theEObject;
-				T1 result = caseXLinkAttributes(xLinkAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.FILTER_PRIMITIVE_ATTRIBUTES: {
-				FilterPrimitiveAttributes filterPrimitiveAttributes = (FilterPrimitiveAttributes)theEObject;
-				T1 result = caseFilterPrimitiveAttributes(filterPrimitiveAttributes);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage._ELEMENTES_: {
-				____ELEMENTES____ ____ELEMENTES____ = (____ELEMENTES____)theEObject;
-				T1 result = case____ELEMENTES____(____ELEMENTES____);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_SVG_ELEMENT: {
-				SvgSvgElement svgSvgElement = (SvgSvgElement)theEObject;
-				T1 result = caseSvgSvgElement(svgSvgElement);
-				if (result == null) result = caseSvgElement(svgSvgElement);
-				if (result == null) result = caseContainerElement(svgSvgElement);
-				if (result == null) result = caseStructuralElement(svgSvgElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgSvgElement);
-				if (result == null) result = caseCoreAttributes(svgSvgElement);
-				if (result == null) result = caseDocumentEventAttributes(svgSvgElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgSvgElement);
-				if (result == null) result = casePresentationAttributes(svgSvgElement);
-				if (result == null) result = caseContentElement(svgSvgElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_GELEMENT: {
-				SvgGElement svgGElement = (SvgGElement)theEObject;
-				T1 result = caseSvgGElement(svgGElement);
-				if (result == null) result = caseSvgElement(svgGElement);
-				if (result == null) result = caseContainerElement(svgGElement);
-				if (result == null) result = caseStructuralElement(svgGElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgGElement);
-				if (result == null) result = caseCoreAttributes(svgGElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgGElement);
-				if (result == null) result = casePresentationAttributes(svgGElement);
-				if (result == null) result = caseContentElement(svgGElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_DEFS_ELEMENT: {
-				SvgDefsElement svgDefsElement = (SvgDefsElement)theEObject;
-				T1 result = caseSvgDefsElement(svgDefsElement);
-				if (result == null) result = caseSvgElement(svgDefsElement);
-				if (result == null) result = caseContainerElement(svgDefsElement);
-				if (result == null) result = caseStructuralElement(svgDefsElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgDefsElement);
-				if (result == null) result = caseCoreAttributes(svgDefsElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgDefsElement);
-				if (result == null) result = casePresentationAttributes(svgDefsElement);
-				if (result == null) result = caseContentElement(svgDefsElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_DESC_ELEMENT: {
-				SvgDescElement svgDescElement = (SvgDescElement)theEObject;
-				T1 result = caseSvgDescElement(svgDescElement);
-				if (result == null) result = caseSvgElement(svgDescElement);
-				if (result == null) result = caseDescriptiveElement(svgDescElement);
-				if (result == null) result = caseCoreAttributes(svgDescElement);
-				if (result == null) result = caseContentElement(svgDescElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_TITLE_ELEMENT: {
-				SvgTitleElement svgTitleElement = (SvgTitleElement)theEObject;
-				T1 result = caseSvgTitleElement(svgTitleElement);
-				if (result == null) result = caseSvgElement(svgTitleElement);
-				if (result == null) result = caseDescriptiveElement(svgTitleElement);
-				if (result == null) result = caseCoreAttributes(svgTitleElement);
-				if (result == null) result = caseContentElement(svgTitleElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_SYMBOL_ELEMENT: {
-				SvgSymbolElement svgSymbolElement = (SvgSymbolElement)theEObject;
-				T1 result = caseSvgSymbolElement(svgSymbolElement);
-				if (result == null) result = caseSvgElement(svgSymbolElement);
-				if (result == null) result = caseContainerElement(svgSymbolElement);
-				if (result == null) result = caseStructuralElement(svgSymbolElement);
-				if (result == null) result = caseCoreAttributes(svgSymbolElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgSymbolElement);
-				if (result == null) result = casePresentationAttributes(svgSymbolElement);
-				if (result == null) result = caseContentElement(svgSymbolElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_USE_ELEMENT: {
-				SvgUseElement svgUseElement = (SvgUseElement)theEObject;
-				T1 result = caseSvgUseElement(svgUseElement);
-				if (result == null) result = caseSvgElement(svgUseElement);
-				if (result == null) result = caseGraphicsElement(svgUseElement);
-				if (result == null) result = caseGraphicsReferencingElement(svgUseElement);
-				if (result == null) result = caseStructuralElement(svgUseElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgUseElement);
-				if (result == null) result = caseCoreAttributes(svgUseElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgUseElement);
-				if (result == null) result = casePresentationAttributes(svgUseElement);
-				if (result == null) result = caseXLinkAttributes(svgUseElement);
-				if (result == null) result = caseContentElement(svgUseElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_IMAGE_ELEMENT: {
-				SvgImageElement svgImageElement = (SvgImageElement)theEObject;
-				T1 result = caseSvgImageElement(svgImageElement);
-				if (result == null) result = caseSvgElement(svgImageElement);
-				if (result == null) result = caseGraphicsElement(svgImageElement);
-				if (result == null) result = caseGraphicsReferencingElement(svgImageElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgImageElement);
-				if (result == null) result = caseCoreAttributes(svgImageElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgImageElement);
-				if (result == null) result = casePresentationAttributes(svgImageElement);
-				if (result == null) result = caseXLinkAttributes(svgImageElement);
-				if (result == null) result = caseContentElement(svgImageElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_SWITCH_ELEMENT: {
-				SvgSwitchElement svgSwitchElement = (SvgSwitchElement)theEObject;
-				T1 result = caseSvgSwitchElement(svgSwitchElement);
-				if (result == null) result = caseSvgElement(svgSwitchElement);
-				if (result == null) result = caseContainerElement(svgSwitchElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgSwitchElement);
-				if (result == null) result = caseCoreAttributes(svgSwitchElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgSwitchElement);
-				if (result == null) result = casePresentationAttributes(svgSwitchElement);
-				if (result == null) result = caseContentElement(svgSwitchElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_PATH_ELEMENT: {
-				SvgPathElement svgPathElement = (SvgPathElement)theEObject;
-				T1 result = caseSvgPathElement(svgPathElement);
-				if (result == null) result = caseSvgElement(svgPathElement);
-				if (result == null) result = caseGraphicsElement(svgPathElement);
-				if (result == null) result = caseShapeElement(svgPathElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgPathElement);
-				if (result == null) result = caseCoreAttributes(svgPathElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgPathElement);
-				if (result == null) result = casePresentationAttributes(svgPathElement);
-				if (result == null) result = caseContentElement(svgPathElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_RECT_ELEMENT: {
-				SvgRectElement svgRectElement = (SvgRectElement)theEObject;
-				T1 result = caseSvgRectElement(svgRectElement);
-				if (result == null) result = caseSvgElement(svgRectElement);
-				if (result == null) result = caseBasicShapeElement(svgRectElement);
-				if (result == null) result = caseGraphicsElement(svgRectElement);
-				if (result == null) result = caseShapeElement(svgRectElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgRectElement);
-				if (result == null) result = caseCoreAttributes(svgRectElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgRectElement);
-				if (result == null) result = casePresentationAttributes(svgRectElement);
-				if (result == null) result = caseContentElement(svgRectElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_CIRCLE_ELEMENT: {
-				SvgCircleElement svgCircleElement = (SvgCircleElement)theEObject;
-				T1 result = caseSvgCircleElement(svgCircleElement);
-				if (result == null) result = caseSvgElement(svgCircleElement);
-				if (result == null) result = caseBasicShapeElement(svgCircleElement);
-				if (result == null) result = caseGraphicsElement(svgCircleElement);
-				if (result == null) result = caseShapeElement(svgCircleElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgCircleElement);
-				if (result == null) result = caseCoreAttributes(svgCircleElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgCircleElement);
-				if (result == null) result = casePresentationAttributes(svgCircleElement);
-				if (result == null) result = caseContentElement(svgCircleElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ELLIPSE_ELEMENT: {
-				SvgEllipseElement svgEllipseElement = (SvgEllipseElement)theEObject;
-				T1 result = caseSvgEllipseElement(svgEllipseElement);
-				if (result == null) result = caseSvgElement(svgEllipseElement);
-				if (result == null) result = caseBasicShapeElement(svgEllipseElement);
-				if (result == null) result = caseGraphicsElement(svgEllipseElement);
-				if (result == null) result = caseShapeElement(svgEllipseElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgEllipseElement);
-				if (result == null) result = caseCoreAttributes(svgEllipseElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgEllipseElement);
-				if (result == null) result = casePresentationAttributes(svgEllipseElement);
-				if (result == null) result = caseContentElement(svgEllipseElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_LINE_ELEMENT: {
-				SvgLineElement svgLineElement = (SvgLineElement)theEObject;
-				T1 result = caseSvgLineElement(svgLineElement);
-				if (result == null) result = caseSvgElement(svgLineElement);
-				if (result == null) result = caseBasicShapeElement(svgLineElement);
-				if (result == null) result = caseGraphicsElement(svgLineElement);
-				if (result == null) result = caseShapeElement(svgLineElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgLineElement);
-				if (result == null) result = caseCoreAttributes(svgLineElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgLineElement);
-				if (result == null) result = casePresentationAttributes(svgLineElement);
-				if (result == null) result = caseContentElement(svgLineElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_POLYLINE_ELEMENT: {
-				SvgPolylineElement svgPolylineElement = (SvgPolylineElement)theEObject;
-				T1 result = caseSvgPolylineElement(svgPolylineElement);
-				if (result == null) result = caseSvgElement(svgPolylineElement);
-				if (result == null) result = caseBasicShapeElement(svgPolylineElement);
-				if (result == null) result = caseGraphicsElement(svgPolylineElement);
-				if (result == null) result = caseShapeElement(svgPolylineElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgPolylineElement);
-				if (result == null) result = caseCoreAttributes(svgPolylineElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgPolylineElement);
-				if (result == null) result = casePresentationAttributes(svgPolylineElement);
-				if (result == null) result = caseContentElement(svgPolylineElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_POLYGON_ELEMENT: {
-				SvgPolygonElement svgPolygonElement = (SvgPolygonElement)theEObject;
-				T1 result = caseSvgPolygonElement(svgPolygonElement);
-				if (result == null) result = caseSvgElement(svgPolygonElement);
-				if (result == null) result = caseBasicShapeElement(svgPolygonElement);
-				if (result == null) result = caseGraphicsElement(svgPolygonElement);
-				if (result == null) result = caseShapeElement(svgPolygonElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgPolygonElement);
-				if (result == null) result = caseCoreAttributes(svgPolygonElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgPolygonElement);
-				if (result == null) result = casePresentationAttributes(svgPolygonElement);
-				if (result == null) result = caseContentElement(svgPolygonElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_TEXT_ELEMENT: {
-				SvgTextElement svgTextElement = (SvgTextElement)theEObject;
-				T1 result = caseSvgTextElement(svgTextElement);
-				if (result == null) result = caseSvgElement(svgTextElement);
-				if (result == null) result = caseGraphicsElement(svgTextElement);
-				if (result == null) result = caseTextContentElement(svgTextElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgTextElement);
-				if (result == null) result = caseCoreAttributes(svgTextElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgTextElement);
-				if (result == null) result = casePresentationAttributes(svgTextElement);
-				if (result == null) result = caseContentElement(svgTextElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_TSPAN_ELEMENT: {
-				SvgTspanElement svgTspanElement = (SvgTspanElement)theEObject;
-				T1 result = caseSvgTspanElement(svgTspanElement);
-				if (result == null) result = caseSvgElement(svgTspanElement);
-				if (result == null) result = caseTextContentElement(svgTspanElement);
-				if (result == null) result = caseTextContentChildElement(svgTspanElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgTspanElement);
-				if (result == null) result = caseCoreAttributes(svgTspanElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgTspanElement);
-				if (result == null) result = casePresentationAttributes(svgTspanElement);
-				if (result == null) result = caseContentElement(svgTspanElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_TREF_ELEMENT: {
-				SvgTrefElement svgTrefElement = (SvgTrefElement)theEObject;
-				T1 result = caseSvgTrefElement(svgTrefElement);
-				if (result == null) result = caseSvgElement(svgTrefElement);
-				if (result == null) result = caseTextContentElement(svgTrefElement);
-				if (result == null) result = caseTextContentChildElement(svgTrefElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgTrefElement);
-				if (result == null) result = caseCoreAttributes(svgTrefElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgTrefElement);
-				if (result == null) result = casePresentationAttributes(svgTrefElement);
-				if (result == null) result = caseXLinkAttributes(svgTrefElement);
-				if (result == null) result = caseContentElement(svgTrefElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_TEXT_PATH_ELEMENT: {
-				SvgTextPathElement svgTextPathElement = (SvgTextPathElement)theEObject;
-				T1 result = caseSvgTextPathElement(svgTextPathElement);
-				if (result == null) result = caseSvgElement(svgTextPathElement);
-				if (result == null) result = caseTextContentElement(svgTextPathElement);
-				if (result == null) result = caseTextContentChildElement(svgTextPathElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgTextPathElement);
-				if (result == null) result = caseCoreAttributes(svgTextPathElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgTextPathElement);
-				if (result == null) result = casePresentationAttributes(svgTextPathElement);
-				if (result == null) result = caseXLinkAttributes(svgTextPathElement);
-				if (result == null) result = caseContentElement(svgTextPathElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ALT_GLYPH_ELEMENT: {
-				SvgAltGlyphElement svgAltGlyphElement = (SvgAltGlyphElement)theEObject;
-				T1 result = caseSvgAltGlyphElement(svgAltGlyphElement);
-				if (result == null) result = caseSvgElement(svgAltGlyphElement);
-				if (result == null) result = caseTextContentElement(svgAltGlyphElement);
-				if (result == null) result = caseTextContentChildElement(svgAltGlyphElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgAltGlyphElement);
-				if (result == null) result = caseCoreAttributes(svgAltGlyphElement);
-				if (result == null) result = caseGraphicalEventAttributes(svgAltGlyphElement);
-				if (result == null) result = casePresentationAttributes(svgAltGlyphElement);
-				if (result == null) result = caseXLinkAttributes(svgAltGlyphElement);
-				if (result == null) result = caseContentElement(svgAltGlyphElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ALT_GLYPH_DEF_ELEMENT: {
-				SvgAltGlyphDefElement svgAltGlyphDefElement = (SvgAltGlyphDefElement)theEObject;
-				T1 result = caseSvgAltGlyphDefElement(svgAltGlyphDefElement);
-				if (result == null) result = caseSvgElement(svgAltGlyphDefElement);
-				if (result == null) result = caseCoreAttributes(svgAltGlyphDefElement);
-				if (result == null) result = caseContentElement(svgAltGlyphDefElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ALT_GLYPH_ITEM_ELEMENT: {
-				SvgAltGlyphItemElement svgAltGlyphItemElement = (SvgAltGlyphItemElement)theEObject;
-				T1 result = caseSvgAltGlyphItemElement(svgAltGlyphItemElement);
-				if (result == null) result = caseSvgElement(svgAltGlyphItemElement);
-				if (result == null) result = caseCoreAttributes(svgAltGlyphItemElement);
-				if (result == null) result = caseContentElement(svgAltGlyphItemElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ALT_GLYPH_REF_ELEMENT: {
-				SvgAltGlyphRefElement svgAltGlyphRefElement = (SvgAltGlyphRefElement)theEObject;
-				T1 result = caseSvgAltGlyphRefElement(svgAltGlyphRefElement);
-				if (result == null) result = caseSvgElement(svgAltGlyphRefElement);
-				if (result == null) result = caseCoreAttributes(svgAltGlyphRefElement);
-				if (result == null) result = casePresentationAttributes(svgAltGlyphRefElement);
-				if (result == null) result = caseXLinkAttributes(svgAltGlyphRefElement);
-				if (result == null) result = caseContentElement(svgAltGlyphRefElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_MARKER_ELEMENT: {
-				SvgMarkerElement svgMarkerElement = (SvgMarkerElement)theEObject;
-				T1 result = caseSvgMarkerElement(svgMarkerElement);
-				if (result == null) result = caseSvgElement(svgMarkerElement);
-				if (result == null) result = caseCoreAttributes(svgMarkerElement);
-				if (result == null) result = casePresentationAttributes(svgMarkerElement);
-				if (result == null) result = caseContentElement(svgMarkerElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_COLOR_PROFILE_ELEMENT: {
-				SvgColorProfileElement svgColorProfileElement = (SvgColorProfileElement)theEObject;
-				T1 result = caseSvgColorProfileElement(svgColorProfileElement);
-				if (result == null) result = caseSvgElement(svgColorProfileElement);
-				if (result == null) result = caseCoreAttributes(svgColorProfileElement);
-				if (result == null) result = casePresentationAttributes(svgColorProfileElement);
-				if (result == null) result = caseXLinkAttributes(svgColorProfileElement);
-				if (result == null) result = caseContentElement(svgColorProfileElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_LINEAR_GRADIENT_ELEMENT: {
-				SvgLinearGradientElement svgLinearGradientElement = (SvgLinearGradientElement)theEObject;
-				T1 result = caseSvgLinearGradientElement(svgLinearGradientElement);
-				if (result == null) result = caseSvgElement(svgLinearGradientElement);
-				if (result == null) result = caseGradientElement(svgLinearGradientElement);
-				if (result == null) result = caseCoreAttributes(svgLinearGradientElement);
-				if (result == null) result = casePresentationAttributes(svgLinearGradientElement);
-				if (result == null) result = caseXLinkAttributes(svgLinearGradientElement);
-				if (result == null) result = caseContentElement(svgLinearGradientElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_RADIAL_GRADIENT_ELEMENT: {
-				SvgRadialGradientElement svgRadialGradientElement = (SvgRadialGradientElement)theEObject;
-				T1 result = caseSvgRadialGradientElement(svgRadialGradientElement);
-				if (result == null) result = caseSvgElement(svgRadialGradientElement);
-				if (result == null) result = caseGradientElement(svgRadialGradientElement);
-				if (result == null) result = caseCoreAttributes(svgRadialGradientElement);
-				if (result == null) result = casePresentationAttributes(svgRadialGradientElement);
-				if (result == null) result = caseXLinkAttributes(svgRadialGradientElement);
-				if (result == null) result = caseContentElement(svgRadialGradientElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_STOP_ELEMENT: {
-				SvgStopElement svgStopElement = (SvgStopElement)theEObject;
-				T1 result = caseSvgStopElement(svgStopElement);
-				if (result == null) result = caseSvgElement(svgStopElement);
-				if (result == null) result = caseCoreAttributes(svgStopElement);
-				if (result == null) result = casePresentationAttributes(svgStopElement);
-				if (result == null) result = caseContentElement(svgStopElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_PATTERN_ELEMENT: {
-				SvgPatternElement svgPatternElement = (SvgPatternElement)theEObject;
-				T1 result = caseSvgPatternElement(svgPatternElement);
-				if (result == null) result = caseSvgElement(svgPatternElement);
-				if (result == null) result = caseContainerElement(svgPatternElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgPatternElement);
-				if (result == null) result = caseCoreAttributes(svgPatternElement);
-				if (result == null) result = casePresentationAttributes(svgPatternElement);
-				if (result == null) result = caseXLinkAttributes(svgPatternElement);
-				if (result == null) result = caseContentElement(svgPatternElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_CLIP_PATH_ELEMENT: {
-				SvgClipPathElement svgClipPathElement = (SvgClipPathElement)theEObject;
-				T1 result = caseSvgClipPathElement(svgClipPathElement);
-				if (result == null) result = caseSvgElement(svgClipPathElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgClipPathElement);
-				if (result == null) result = caseCoreAttributes(svgClipPathElement);
-				if (result == null) result = casePresentationAttributes(svgClipPathElement);
-				if (result == null) result = caseContentElement(svgClipPathElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_MASK_ELEMENT: {
-				SvgMaskElement svgMaskElement = (SvgMaskElement)theEObject;
-				T1 result = caseSvgMaskElement(svgMaskElement);
-				if (result == null) result = caseSvgElement(svgMaskElement);
-				if (result == null) result = caseConditionalProcessingAttributes(svgMaskElement);
-				if (result == null) result = caseCoreAttributes(svgMaskElement);
-				if (result == null) result = casePresentationAttributes(svgMaskElement);
-				if (result == null) result = caseContentElement(svgMaskElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FILTER_ELEMENT: {
-				SvgFilterElement svgFilterElement = (SvgFilterElement)theEObject;
-				T1 result = caseSvgFilterElement(svgFilterElement);
-				if (result == null) result = caseSvgElement(svgFilterElement);
-				if (result == null) result = caseCoreAttributes(svgFilterElement);
-				if (result == null) result = casePresentationAttributes(svgFilterElement);
-				if (result == null) result = caseXLinkAttributes(svgFilterElement);
-				if (result == null) result = caseContentElement(svgFilterElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_DISTANT_LIGHT_ELEMENT: {
-				SvgFeDistantLightElement svgFeDistantLightElement = (SvgFeDistantLightElement)theEObject;
-				T1 result = caseSvgFeDistantLightElement(svgFeDistantLightElement);
-				if (result == null) result = caseSvgElement(svgFeDistantLightElement);
-				if (result == null) result = caseCoreAttributes(svgFeDistantLightElement);
-				if (result == null) result = caseContentElement(svgFeDistantLightElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_POINT_LIGHT_ELEMENT: {
-				SvgFePointLightElement svgFePointLightElement = (SvgFePointLightElement)theEObject;
-				T1 result = caseSvgFePointLightElement(svgFePointLightElement);
-				if (result == null) result = caseSvgElement(svgFePointLightElement);
-				if (result == null) result = caseCoreAttributes(svgFePointLightElement);
-				if (result == null) result = caseLightSourceElement(svgFePointLightElement);
-				if (result == null) result = caseContentElement(svgFePointLightElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_SPOT_LIGHT_ELEMENT: {
-				SvgFeSpotLightElement svgFeSpotLightElement = (SvgFeSpotLightElement)theEObject;
-				T1 result = caseSvgFeSpotLightElement(svgFeSpotLightElement);
-				if (result == null) result = caseSvgElement(svgFeSpotLightElement);
-				if (result == null) result = caseCoreAttributes(svgFeSpotLightElement);
-				if (result == null) result = caseLightSourceElement(svgFeSpotLightElement);
-				if (result == null) result = caseContentElement(svgFeSpotLightElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_BLEND_ELEMENT: {
-				SvgFeBlendElement svgFeBlendElement = (SvgFeBlendElement)theEObject;
-				T1 result = caseSvgFeBlendElement(svgFeBlendElement);
-				if (result == null) result = caseSvgElement(svgFeBlendElement);
-				if (result == null) result = caseCoreAttributes(svgFeBlendElement);
-				if (result == null) result = casePresentationAttributes(svgFeBlendElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeBlendElement);
-				if (result == null) result = caseContentElement(svgFeBlendElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_COLOR_MATRIX_ELEMENT: {
-				SvgFeColorMatrixElement svgFeColorMatrixElement = (SvgFeColorMatrixElement)theEObject;
-				T1 result = caseSvgFeColorMatrixElement(svgFeColorMatrixElement);
-				if (result == null) result = caseSvgElement(svgFeColorMatrixElement);
-				if (result == null) result = caseCoreAttributes(svgFeColorMatrixElement);
-				if (result == null) result = casePresentationAttributes(svgFeColorMatrixElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeColorMatrixElement);
-				if (result == null) result = caseContentElement(svgFeColorMatrixElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_COMPONENT_TRANSFER_ELEMENT: {
-				SvgFeComponentTransferElement svgFeComponentTransferElement = (SvgFeComponentTransferElement)theEObject;
-				T1 result = caseSvgFeComponentTransferElement(svgFeComponentTransferElement);
-				if (result == null) result = caseSvgElement(svgFeComponentTransferElement);
-				if (result == null) result = caseCoreAttributes(svgFeComponentTransferElement);
-				if (result == null) result = casePresentationAttributes(svgFeComponentTransferElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeComponentTransferElement);
-				if (result == null) result = caseContentElement(svgFeComponentTransferElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_FUNC_RELEMENT: {
-				SvgFeFuncRElement svgFeFuncRElement = (SvgFeFuncRElement)theEObject;
-				T1 result = caseSvgFeFuncRElement(svgFeFuncRElement);
-				if (result == null) result = caseSvgElement(svgFeFuncRElement);
-				if (result == null) result = caseCoreAttributes(svgFeFuncRElement);
-				if (result == null) result = casePresentationAttributes(svgFeFuncRElement);
-				if (result == null) result = caseContentElement(svgFeFuncRElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_FUNC_GELEMENT: {
-				SvgFeFuncGElement svgFeFuncGElement = (SvgFeFuncGElement)theEObject;
-				T1 result = caseSvgFeFuncGElement(svgFeFuncGElement);
-				if (result == null) result = caseSvgElement(svgFeFuncGElement);
-				if (result == null) result = caseCoreAttributes(svgFeFuncGElement);
-				if (result == null) result = casePresentationAttributes(svgFeFuncGElement);
-				if (result == null) result = caseContentElement(svgFeFuncGElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_FUNC_BELEMENT: {
-				SvgFeFuncBElement svgFeFuncBElement = (SvgFeFuncBElement)theEObject;
-				T1 result = caseSvgFeFuncBElement(svgFeFuncBElement);
-				if (result == null) result = caseSvgElement(svgFeFuncBElement);
-				if (result == null) result = caseCoreAttributes(svgFeFuncBElement);
-				if (result == null) result = casePresentationAttributes(svgFeFuncBElement);
-				if (result == null) result = caseContentElement(svgFeFuncBElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_FUNC_AELEMENT: {
-				SvgFeFuncAElement svgFeFuncAElement = (SvgFeFuncAElement)theEObject;
-				T1 result = caseSvgFeFuncAElement(svgFeFuncAElement);
-				if (result == null) result = caseSvgElement(svgFeFuncAElement);
-				if (result == null) result = caseCoreAttributes(svgFeFuncAElement);
-				if (result == null) result = casePresentationAttributes(svgFeFuncAElement);
-				if (result == null) result = caseContentElement(svgFeFuncAElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_COMPOSITE_ELEMENT: {
-				SvgFeCompositeElement svgFeCompositeElement = (SvgFeCompositeElement)theEObject;
-				T1 result = caseSvgFeCompositeElement(svgFeCompositeElement);
-				if (result == null) result = caseSvgElement(svgFeCompositeElement);
-				if (result == null) result = caseCoreAttributes(svgFeCompositeElement);
-				if (result == null) result = casePresentationAttributes(svgFeCompositeElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeCompositeElement);
-				if (result == null) result = caseContentElement(svgFeCompositeElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_CONVOLVE_MATRIX_ELEMENT: {
-				SvgFeConvolveMatrixElement svgFeConvolveMatrixElement = (SvgFeConvolveMatrixElement)theEObject;
-				T1 result = caseSvgFeConvolveMatrixElement(svgFeConvolveMatrixElement);
-				if (result == null) result = caseSvgElement(svgFeConvolveMatrixElement);
-				if (result == null) result = caseCoreAttributes(svgFeConvolveMatrixElement);
-				if (result == null) result = casePresentationAttributes(svgFeConvolveMatrixElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeConvolveMatrixElement);
-				if (result == null) result = caseContentElement(svgFeConvolveMatrixElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_DIFFUSE_LIGHTING_ELEMENT: {
-				SvgFeDiffuseLightingElement svgFeDiffuseLightingElement = (SvgFeDiffuseLightingElement)theEObject;
-				T1 result = caseSvgFeDiffuseLightingElement(svgFeDiffuseLightingElement);
-				if (result == null) result = caseSvgElement(svgFeDiffuseLightingElement);
-				if (result == null) result = caseCoreAttributes(svgFeDiffuseLightingElement);
-				if (result == null) result = casePresentationAttributes(svgFeDiffuseLightingElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeDiffuseLightingElement);
-				if (result == null) result = caseContentElement(svgFeDiffuseLightingElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_DISPLACEMENT_MAP_ELEMENT: {
-				SvgFeDisplacementMapElement svgFeDisplacementMapElement = (SvgFeDisplacementMapElement)theEObject;
-				T1 result = caseSvgFeDisplacementMapElement(svgFeDisplacementMapElement);
-				if (result == null) result = caseSvgElement(svgFeDisplacementMapElement);
-				if (result == null) result = caseCoreAttributes(svgFeDisplacementMapElement);
-				if (result == null) result = casePresentationAttributes(svgFeDisplacementMapElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeDisplacementMapElement);
-				if (result == null) result = caseContentElement(svgFeDisplacementMapElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_FLOOD_ELEMENT: {
-				SvgFeFloodElement svgFeFloodElement = (SvgFeFloodElement)theEObject;
-				T1 result = caseSvgFeFloodElement(svgFeFloodElement);
-				if (result == null) result = caseSvgElement(svgFeFloodElement);
-				if (result == null) result = caseCoreAttributes(svgFeFloodElement);
-				if (result == null) result = casePresentationAttributes(svgFeFloodElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeFloodElement);
-				if (result == null) result = caseContentElement(svgFeFloodElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_GAUSSIAN_BLUR_ELEMENT: {
-				SvgFeGaussianBlurElement svgFeGaussianBlurElement = (SvgFeGaussianBlurElement)theEObject;
-				T1 result = caseSvgFeGaussianBlurElement(svgFeGaussianBlurElement);
-				if (result == null) result = caseSvgElement(svgFeGaussianBlurElement);
-				if (result == null) result = caseCoreAttributes(svgFeGaussianBlurElement);
-				if (result == null) result = casePresentationAttributes(svgFeGaussianBlurElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeGaussianBlurElement);
-				if (result == null) result = caseContentElement(svgFeGaussianBlurElement);
-				if (result == null) result = caseFilterPrimitiveElement(svgFeGaussianBlurElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_IMAGE_ELEMENT: {
-				SvgFeImageElement svgFeImageElement = (SvgFeImageElement)theEObject;
-				T1 result = caseSvgFeImageElement(svgFeImageElement);
-				if (result == null) result = caseSvgElement(svgFeImageElement);
-				if (result == null) result = caseCoreAttributes(svgFeImageElement);
-				if (result == null) result = casePresentationAttributes(svgFeImageElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeImageElement);
-				if (result == null) result = caseXLinkAttributes(svgFeImageElement);
-				if (result == null) result = caseContentElement(svgFeImageElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_MERGE_ELEMENT: {
-				SvgFeMergeElement svgFeMergeElement = (SvgFeMergeElement)theEObject;
-				T1 result = caseSvgFeMergeElement(svgFeMergeElement);
-				if (result == null) result = caseSvgElement(svgFeMergeElement);
-				if (result == null) result = caseCoreAttributes(svgFeMergeElement);
-				if (result == null) result = casePresentationAttributes(svgFeMergeElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeMergeElement);
-				if (result == null) result = caseContentElement(svgFeMergeElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_MERGE_NODE_ELEMENT: {
-				SvgFeMergeNodeElement svgFeMergeNodeElement = (SvgFeMergeNodeElement)theEObject;
-				T1 result = caseSvgFeMergeNodeElement(svgFeMergeNodeElement);
-				if (result == null) result = caseSvgElement(svgFeMergeNodeElement);
-				if (result == null) result = caseCoreAttributes(svgFeMergeNodeElement);
-				if (result == null) result = caseContentElement(svgFeMergeNodeElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_MORPHOLOGY_ELEMENT: {
-				SvgFeMorphologyElement svgFeMorphologyElement = (SvgFeMorphologyElement)theEObject;
-				T1 result = caseSvgFeMorphologyElement(svgFeMorphologyElement);
-				if (result == null) result = caseSvgElement(svgFeMorphologyElement);
-				if (result == null) result = caseCoreAttributes(svgFeMorphologyElement);
-				if (result == null) result = casePresentationAttributes(svgFeMorphologyElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeMorphologyElement);
-				if (result == null) result = caseContentElement(svgFeMorphologyElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_OFFSET_ELEMENT: {
-				SvgFeOffsetElement svgFeOffsetElement = (SvgFeOffsetElement)theEObject;
-				T1 result = caseSvgFeOffsetElement(svgFeOffsetElement);
-				if (result == null) result = caseSvgElement(svgFeOffsetElement);
-				if (result == null) result = caseCoreAttributes(svgFeOffsetElement);
-				if (result == null) result = casePresentationAttributes(svgFeOffsetElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeOffsetElement);
-				if (result == null) result = caseContentElement(svgFeOffsetElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_SPECULAR_LIGHTING_ELEMENT: {
-				SvgFeSpecularLightingElement svgFeSpecularLightingElement = (SvgFeSpecularLightingElement)theEObject;
-				T1 result = caseSvgFeSpecularLightingElement(svgFeSpecularLightingElement);
-				if (result == null) result = caseSvgElement(svgFeSpecularLightingElement);
-				if (result == null) result = caseCoreAttributes(svgFeSpecularLightingElement);
-				if (result == null) result = casePresentationAttributes(svgFeSpecularLightingElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeSpecularLightingElement);
-				if (result == null) result = caseContentElement(svgFeSpecularLightingElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_TILE_ELEMENT: {
-				SvgFeTileElement svgFeTileElement = (SvgFeTileElement)theEObject;
-				T1 result = caseSvgFeTileElement(svgFeTileElement);
-				if (result == null) result = caseSvgElement(svgFeTileElement);
-				if (result == null) result = caseCoreAttributes(svgFeTileElement);
-				if (result == null) result = casePresentationAttributes(svgFeTileElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeTileElement);
-				if (result == null) result = caseContentElement(svgFeTileElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_FE_TURBULENCE_ELEMENT: {
-				SvgFeTurbulenceElement svgFeTurbulenceElement = (SvgFeTurbulenceElement)theEObject;
-				T1 result = caseSvgFeTurbulenceElement(svgFeTurbulenceElement);
-				if (result == null) result = caseSvgElement(svgFeTurbulenceElement);
-				if (result == null) result = caseCoreAttributes(svgFeTurbulenceElement);
-				if (result == null) result = casePresentationAttributes(svgFeTurbulenceElement);
-				if (result == null) result = caseFilterPrimitiveAttributes(svgFeTurbulenceElement);
-				if (result == null) result = caseContentElement(svgFeTurbulenceElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_ANIMATE_ELEMENT: {
-				SvgAnimateElement svgAnimateElement = (SvgAnimateElement)theEObject;
-				T1 result = caseSvgAnimateElement(svgAnimateElement);
-				if (result == null) result = caseSvgElement(svgAnimateElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case SvgPackage.SVG_METADATA_ELEMENT: {
-				SvgMetadataElement svgMetadataElement = (SvgMetadataElement)theEObject;
-				T1 result = caseSvgMetadataElement(svgMetadataElement);
-				if (result == null) result = caseSvgElement(svgMetadataElement);
-				if (result == null) result = caseCoreAttributes(svgMetadataElement);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			default: return defaultCase(theEObject);
-		}
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Content Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Content Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public <T extends SvgElement> T1 caseContentElement(ContentElement<T> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Container Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Container Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public <T extends SvgElement> T1 caseContainerElement(ContainerElement<T> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Structural Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Structural Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseStructuralElement(StructuralElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgElement(SvgElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Descriptive Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Descriptive Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseDescriptiveElement(DescriptiveElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Graphics Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Graphics Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseGraphicsElement(GraphicsElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Graphics Referencing Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Graphics Referencing Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseGraphicsReferencingElement(GraphicsReferencingElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Shape Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Shape Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseShapeElement(ShapeElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Basic Shape Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Basic Shape Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseBasicShapeElement(BasicShapeElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Text Content Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Text Content Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseTextContentElement(TextContentElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Text Content Child Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Text Content Child Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseTextContentChildElement(TextContentChildElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Gradient Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Gradient Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseGradientElement(GradientElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Light Source Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Light Source Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseLightSourceElement(LightSourceElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Filter Primitive Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Filter Primitive Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseFilterPrimitiveElement(FilterPrimitiveElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Animation Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Animation Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseAnimationElement(AnimationElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>ENUMS </em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>ENUMS </em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 case____ENUMS____(____ENUMS____ object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>DATATYPES </em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>DATATYPES </em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 case____DATATYPES____(____DATATYPES____ object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>ATTRIBUTES </em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>ATTRIBUTES </em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 case____ATTRIBUTES____(____ATTRIBUTES____ object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Conditional Processing Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Conditional Processing Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseConditionalProcessingAttributes(ConditionalProcessingAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Core Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Core Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseCoreAttributes(CoreAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Document Event Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Document Event Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseDocumentEventAttributes(DocumentEventAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Graphical Event Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Graphical Event Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseGraphicalEventAttributes(GraphicalEventAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Presentation Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Presentation Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 casePresentationAttributes(PresentationAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>XLink Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>XLink Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseXLinkAttributes(XLinkAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Filter Primitive Attributes</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Filter Primitive Attributes</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseFilterPrimitiveAttributes(FilterPrimitiveAttributes object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>ELEMENTES </em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>ELEMENTES </em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 case____ELEMENTES____(____ELEMENTES____ object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Svg Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Svg Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgSvgElement(SvgSvgElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>GElement</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>GElement</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgGElement(SvgGElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Defs Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Defs Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgDefsElement(SvgDefsElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Desc Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Desc Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgDescElement(SvgDescElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Title Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Title Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgTitleElement(SvgTitleElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Symbol Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Symbol Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgSymbolElement(SvgSymbolElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Use Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Use Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgUseElement(SvgUseElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Image Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Image Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgImageElement(SvgImageElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Switch Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Switch Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgSwitchElement(SvgSwitchElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Path Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Path Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgPathElement(SvgPathElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Rect Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Rect Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgRectElement(SvgRectElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Circle Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Circle Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgCircleElement(SvgCircleElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Ellipse Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Ellipse Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgEllipseElement(SvgEllipseElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Line Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Line Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgLineElement(SvgLineElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Polyline Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Polyline Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgPolylineElement(SvgPolylineElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Polygon Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Polygon Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgPolygonElement(SvgPolygonElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Text Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Text Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgTextElement(SvgTextElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Tspan Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Tspan Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgTspanElement(SvgTspanElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Tref Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Tref Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgTrefElement(SvgTrefElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Text Path Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Text Path Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgTextPathElement(SvgTextPathElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgAltGlyphElement(SvgAltGlyphElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Def Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Def Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgAltGlyphDefElement(SvgAltGlyphDefElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Item Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Item Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgAltGlyphItemElement(SvgAltGlyphItemElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Ref Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Ref Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgAltGlyphRefElement(SvgAltGlyphRefElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Marker Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Marker Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgMarkerElement(SvgMarkerElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Color Profile Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Color Profile Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgColorProfileElement(SvgColorProfileElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Linear Gradient Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Linear Gradient Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgLinearGradientElement(SvgLinearGradientElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Radial Gradient Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Radial Gradient Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgRadialGradientElement(SvgRadialGradientElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Stop Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Stop Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgStopElement(SvgStopElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Pattern Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Pattern Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgPatternElement(SvgPatternElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Clip Path Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Clip Path Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgClipPathElement(SvgClipPathElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Mask Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Mask Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgMaskElement(SvgMaskElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Filter Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Filter Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFilterElement(SvgFilterElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Distant Light Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Distant Light Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeDistantLightElement(SvgFeDistantLightElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Point Light Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Point Light Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFePointLightElement(SvgFePointLightElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Spot Light Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Spot Light Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeSpotLightElement(SvgFeSpotLightElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Blend Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Blend Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeBlendElement(SvgFeBlendElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Color Matrix Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Color Matrix Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeColorMatrixElement(SvgFeColorMatrixElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Component Transfer Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Component Transfer Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeComponentTransferElement(SvgFeComponentTransferElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Func RElement</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Func RElement</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeFuncRElement(SvgFeFuncRElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Func GElement</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Func GElement</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeFuncGElement(SvgFeFuncGElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Func BElement</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Func BElement</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeFuncBElement(SvgFeFuncBElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Func AElement</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Func AElement</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeFuncAElement(SvgFeFuncAElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Composite Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Composite Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeCompositeElement(SvgFeCompositeElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Convolve Matrix Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Convolve Matrix Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeConvolveMatrixElement(SvgFeConvolveMatrixElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Diffuse Lighting Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Diffuse Lighting Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeDiffuseLightingElement(SvgFeDiffuseLightingElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Displacement Map Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Displacement Map Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeDisplacementMapElement(SvgFeDisplacementMapElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Flood Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Flood Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeFloodElement(SvgFeFloodElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Gaussian Blur Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Gaussian Blur Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeGaussianBlurElement(SvgFeGaussianBlurElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Image Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Image Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeImageElement(SvgFeImageElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Merge Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Merge Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeMergeElement(SvgFeMergeElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Merge Node Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Merge Node Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeMergeNodeElement(SvgFeMergeNodeElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Morphology Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Morphology Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeMorphologyElement(SvgFeMorphologyElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Offset Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Offset Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeOffsetElement(SvgFeOffsetElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Specular Lighting Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Specular Lighting Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeSpecularLightingElement(SvgFeSpecularLightingElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Tile Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Tile Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeTileElement(SvgFeTileElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fe Turbulence Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fe Turbulence Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgFeTurbulenceElement(SvgFeTurbulenceElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Animate Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Animate Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgAnimateElement(SvgAnimateElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Metadata Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Metadata Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T1 caseSvgMetadataElement(SvgMetadataElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch, but this is the last case anyway.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
-	 * @generated
-	 */
-	@Override
-	public T1 defaultCase(EObject object) {
-		return null;
-	}
-
-} //SvgSwitch
+/**

+ */

+package org.eclipse.fx.formats.svg.svg.util;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.util.Switch;

+

+import org.eclipse.fx.formats.svg.svg.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.fx.formats.svg.svg.SvgPackage

+ * @generated

+ */

+public class SvgSwitch<T1> extends Switch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static SvgPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SvgSwitch() {

+		if (modelPackage == null) {

+			modelPackage = SvgPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Checks whether this is a switch for the given package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param ePackage the package in question.

+	 * @return whether this is a switch for the given package.

+	 * @generated

+	 */

+	@Override

+	protected boolean isSwitchFor(EPackage ePackage) {

+		return ePackage == modelPackage;

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	@Override

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case SvgPackage.CONTENT_ELEMENT: {

+				ContentElement<?> contentElement = (ContentElement<?>)theEObject;

+				T1 result = caseContentElement(contentElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.CONTAINER_ELEMENT: {

+				ContainerElement<?> containerElement = (ContainerElement<?>)theEObject;

+				T1 result = caseContainerElement(containerElement);

+				if (result == null) result = caseContentElement(containerElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.STRUCTURAL_ELEMENT: {

+				StructuralElement structuralElement = (StructuralElement)theEObject;

+				T1 result = caseStructuralElement(structuralElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ELEMENT: {

+				SvgElement svgElement = (SvgElement)theEObject;

+				T1 result = caseSvgElement(svgElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.DESCRIPTIVE_ELEMENT: {

+				DescriptiveElement descriptiveElement = (DescriptiveElement)theEObject;

+				T1 result = caseDescriptiveElement(descriptiveElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.GRAPHICS_ELEMENT: {

+				GraphicsElement graphicsElement = (GraphicsElement)theEObject;

+				T1 result = caseGraphicsElement(graphicsElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.GRAPHICS_REFERENCING_ELEMENT: {

+				GraphicsReferencingElement graphicsReferencingElement = (GraphicsReferencingElement)theEObject;

+				T1 result = caseGraphicsReferencingElement(graphicsReferencingElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SHAPE_ELEMENT: {

+				ShapeElement shapeElement = (ShapeElement)theEObject;

+				T1 result = caseShapeElement(shapeElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.BASIC_SHAPE_ELEMENT: {

+				BasicShapeElement basicShapeElement = (BasicShapeElement)theEObject;

+				T1 result = caseBasicShapeElement(basicShapeElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.TEXT_CONTENT_ELEMENT: {

+				TextContentElement textContentElement = (TextContentElement)theEObject;

+				T1 result = caseTextContentElement(textContentElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.TEXT_CONTENT_CHILD_ELEMENT: {

+				TextContentChildElement textContentChildElement = (TextContentChildElement)theEObject;

+				T1 result = caseTextContentChildElement(textContentChildElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.GRADIENT_ELEMENT: {

+				GradientElement gradientElement = (GradientElement)theEObject;

+				T1 result = caseGradientElement(gradientElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.LIGHT_SOURCE_ELEMENT: {

+				LightSourceElement lightSourceElement = (LightSourceElement)theEObject;

+				T1 result = caseLightSourceElement(lightSourceElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.FILTER_PRIMITIVE_ELEMENT: {

+				FilterPrimitiveElement filterPrimitiveElement = (FilterPrimitiveElement)theEObject;

+				T1 result = caseFilterPrimitiveElement(filterPrimitiveElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.ANIMATION_ELEMENT: {

+				AnimationElement animationElement = (AnimationElement)theEObject;

+				T1 result = caseAnimationElement(animationElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage._ENUMS_: {

+				____ENUMS____ ____ENUMS____ = (____ENUMS____)theEObject;

+				T1 result = case____ENUMS____(____ENUMS____);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage._DATATYPES_: {

+				____DATATYPES____ ____DATATYPES____ = (____DATATYPES____)theEObject;

+				T1 result = case____DATATYPES____(____DATATYPES____);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage._ATTRIBUTES_: {

+				____ATTRIBUTES____ ____ATTRIBUTES____ = (____ATTRIBUTES____)theEObject;

+				T1 result = case____ATTRIBUTES____(____ATTRIBUTES____);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.CONDITIONAL_PROCESSING_ATTRIBUTES: {

+				ConditionalProcessingAttributes conditionalProcessingAttributes = (ConditionalProcessingAttributes)theEObject;

+				T1 result = caseConditionalProcessingAttributes(conditionalProcessingAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.CORE_ATTRIBUTES: {

+				CoreAttributes coreAttributes = (CoreAttributes)theEObject;

+				T1 result = caseCoreAttributes(coreAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.DOCUMENT_EVENT_ATTRIBUTES: {

+				DocumentEventAttributes documentEventAttributes = (DocumentEventAttributes)theEObject;

+				T1 result = caseDocumentEventAttributes(documentEventAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.GRAPHICAL_EVENT_ATTRIBUTES: {

+				GraphicalEventAttributes graphicalEventAttributes = (GraphicalEventAttributes)theEObject;

+				T1 result = caseGraphicalEventAttributes(graphicalEventAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.PRESENTATION_ATTRIBUTES: {

+				PresentationAttributes presentationAttributes = (PresentationAttributes)theEObject;

+				T1 result = casePresentationAttributes(presentationAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.XLINK_ATTRIBUTES: {

+				XLinkAttributes xLinkAttributes = (XLinkAttributes)theEObject;

+				T1 result = caseXLinkAttributes(xLinkAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.FILTER_PRIMITIVE_ATTRIBUTES: {

+				FilterPrimitiveAttributes filterPrimitiveAttributes = (FilterPrimitiveAttributes)theEObject;

+				T1 result = caseFilterPrimitiveAttributes(filterPrimitiveAttributes);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage._ELEMENTES_: {

+				____ELEMENTES____ ____ELEMENTES____ = (____ELEMENTES____)theEObject;

+				T1 result = case____ELEMENTES____(____ELEMENTES____);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_SVG_ELEMENT: {

+				SvgSvgElement svgSvgElement = (SvgSvgElement)theEObject;

+				T1 result = caseSvgSvgElement(svgSvgElement);

+				if (result == null) result = caseSvgElement(svgSvgElement);

+				if (result == null) result = caseContainerElement(svgSvgElement);

+				if (result == null) result = caseStructuralElement(svgSvgElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgSvgElement);

+				if (result == null) result = caseCoreAttributes(svgSvgElement);

+				if (result == null) result = caseDocumentEventAttributes(svgSvgElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgSvgElement);

+				if (result == null) result = casePresentationAttributes(svgSvgElement);

+				if (result == null) result = caseContentElement(svgSvgElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_GELEMENT: {

+				SvgGElement svgGElement = (SvgGElement)theEObject;

+				T1 result = caseSvgGElement(svgGElement);

+				if (result == null) result = caseSvgElement(svgGElement);

+				if (result == null) result = caseContainerElement(svgGElement);

+				if (result == null) result = caseStructuralElement(svgGElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgGElement);

+				if (result == null) result = caseCoreAttributes(svgGElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgGElement);

+				if (result == null) result = casePresentationAttributes(svgGElement);

+				if (result == null) result = caseContentElement(svgGElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_DEFS_ELEMENT: {

+				SvgDefsElement svgDefsElement = (SvgDefsElement)theEObject;

+				T1 result = caseSvgDefsElement(svgDefsElement);

+				if (result == null) result = caseSvgElement(svgDefsElement);

+				if (result == null) result = caseContainerElement(svgDefsElement);

+				if (result == null) result = caseStructuralElement(svgDefsElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgDefsElement);

+				if (result == null) result = caseCoreAttributes(svgDefsElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgDefsElement);

+				if (result == null) result = casePresentationAttributes(svgDefsElement);

+				if (result == null) result = caseContentElement(svgDefsElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_DESC_ELEMENT: {

+				SvgDescElement svgDescElement = (SvgDescElement)theEObject;

+				T1 result = caseSvgDescElement(svgDescElement);

+				if (result == null) result = caseSvgElement(svgDescElement);

+				if (result == null) result = caseDescriptiveElement(svgDescElement);

+				if (result == null) result = caseCoreAttributes(svgDescElement);

+				if (result == null) result = caseContentElement(svgDescElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_TITLE_ELEMENT: {

+				SvgTitleElement svgTitleElement = (SvgTitleElement)theEObject;

+				T1 result = caseSvgTitleElement(svgTitleElement);

+				if (result == null) result = caseSvgElement(svgTitleElement);

+				if (result == null) result = caseDescriptiveElement(svgTitleElement);

+				if (result == null) result = caseCoreAttributes(svgTitleElement);

+				if (result == null) result = caseContentElement(svgTitleElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_SYMBOL_ELEMENT: {

+				SvgSymbolElement svgSymbolElement = (SvgSymbolElement)theEObject;

+				T1 result = caseSvgSymbolElement(svgSymbolElement);

+				if (result == null) result = caseSvgElement(svgSymbolElement);

+				if (result == null) result = caseContainerElement(svgSymbolElement);

+				if (result == null) result = caseStructuralElement(svgSymbolElement);

+				if (result == null) result = caseCoreAttributes(svgSymbolElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgSymbolElement);

+				if (result == null) result = casePresentationAttributes(svgSymbolElement);

+				if (result == null) result = caseContentElement(svgSymbolElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_USE_ELEMENT: {

+				SvgUseElement svgUseElement = (SvgUseElement)theEObject;

+				T1 result = caseSvgUseElement(svgUseElement);

+				if (result == null) result = caseSvgElement(svgUseElement);

+				if (result == null) result = caseGraphicsElement(svgUseElement);

+				if (result == null) result = caseGraphicsReferencingElement(svgUseElement);

+				if (result == null) result = caseStructuralElement(svgUseElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgUseElement);

+				if (result == null) result = caseCoreAttributes(svgUseElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgUseElement);

+				if (result == null) result = casePresentationAttributes(svgUseElement);

+				if (result == null) result = caseXLinkAttributes(svgUseElement);

+				if (result == null) result = caseContentElement(svgUseElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_IMAGE_ELEMENT: {

+				SvgImageElement svgImageElement = (SvgImageElement)theEObject;

+				T1 result = caseSvgImageElement(svgImageElement);

+				if (result == null) result = caseSvgElement(svgImageElement);

+				if (result == null) result = caseGraphicsElement(svgImageElement);

+				if (result == null) result = caseGraphicsReferencingElement(svgImageElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgImageElement);

+				if (result == null) result = caseCoreAttributes(svgImageElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgImageElement);

+				if (result == null) result = casePresentationAttributes(svgImageElement);

+				if (result == null) result = caseXLinkAttributes(svgImageElement);

+				if (result == null) result = caseContentElement(svgImageElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_SWITCH_ELEMENT: {

+				SvgSwitchElement svgSwitchElement = (SvgSwitchElement)theEObject;

+				T1 result = caseSvgSwitchElement(svgSwitchElement);

+				if (result == null) result = caseSvgElement(svgSwitchElement);

+				if (result == null) result = caseContainerElement(svgSwitchElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgSwitchElement);

+				if (result == null) result = caseCoreAttributes(svgSwitchElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgSwitchElement);

+				if (result == null) result = casePresentationAttributes(svgSwitchElement);

+				if (result == null) result = caseContentElement(svgSwitchElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_PATH_ELEMENT: {

+				SvgPathElement svgPathElement = (SvgPathElement)theEObject;

+				T1 result = caseSvgPathElement(svgPathElement);

+				if (result == null) result = caseSvgElement(svgPathElement);

+				if (result == null) result = caseGraphicsElement(svgPathElement);

+				if (result == null) result = caseShapeElement(svgPathElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgPathElement);

+				if (result == null) result = caseCoreAttributes(svgPathElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgPathElement);

+				if (result == null) result = casePresentationAttributes(svgPathElement);

+				if (result == null) result = caseContentElement(svgPathElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_RECT_ELEMENT: {

+				SvgRectElement svgRectElement = (SvgRectElement)theEObject;

+				T1 result = caseSvgRectElement(svgRectElement);

+				if (result == null) result = caseSvgElement(svgRectElement);

+				if (result == null) result = caseBasicShapeElement(svgRectElement);

+				if (result == null) result = caseGraphicsElement(svgRectElement);

+				if (result == null) result = caseShapeElement(svgRectElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgRectElement);

+				if (result == null) result = caseCoreAttributes(svgRectElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgRectElement);

+				if (result == null) result = casePresentationAttributes(svgRectElement);

+				if (result == null) result = caseContentElement(svgRectElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_CIRCLE_ELEMENT: {

+				SvgCircleElement svgCircleElement = (SvgCircleElement)theEObject;

+				T1 result = caseSvgCircleElement(svgCircleElement);

+				if (result == null) result = caseSvgElement(svgCircleElement);

+				if (result == null) result = caseBasicShapeElement(svgCircleElement);

+				if (result == null) result = caseGraphicsElement(svgCircleElement);

+				if (result == null) result = caseShapeElement(svgCircleElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgCircleElement);

+				if (result == null) result = caseCoreAttributes(svgCircleElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgCircleElement);

+				if (result == null) result = casePresentationAttributes(svgCircleElement);

+				if (result == null) result = caseContentElement(svgCircleElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ELLIPSE_ELEMENT: {

+				SvgEllipseElement svgEllipseElement = (SvgEllipseElement)theEObject;

+				T1 result = caseSvgEllipseElement(svgEllipseElement);

+				if (result == null) result = caseSvgElement(svgEllipseElement);

+				if (result == null) result = caseBasicShapeElement(svgEllipseElement);

+				if (result == null) result = caseGraphicsElement(svgEllipseElement);

+				if (result == null) result = caseShapeElement(svgEllipseElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgEllipseElement);

+				if (result == null) result = caseCoreAttributes(svgEllipseElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgEllipseElement);

+				if (result == null) result = casePresentationAttributes(svgEllipseElement);

+				if (result == null) result = caseContentElement(svgEllipseElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_LINE_ELEMENT: {

+				SvgLineElement svgLineElement = (SvgLineElement)theEObject;

+				T1 result = caseSvgLineElement(svgLineElement);

+				if (result == null) result = caseSvgElement(svgLineElement);

+				if (result == null) result = caseBasicShapeElement(svgLineElement);

+				if (result == null) result = caseGraphicsElement(svgLineElement);

+				if (result == null) result = caseShapeElement(svgLineElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgLineElement);

+				if (result == null) result = caseCoreAttributes(svgLineElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgLineElement);

+				if (result == null) result = casePresentationAttributes(svgLineElement);

+				if (result == null) result = caseContentElement(svgLineElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_POLYLINE_ELEMENT: {

+				SvgPolylineElement svgPolylineElement = (SvgPolylineElement)theEObject;

+				T1 result = caseSvgPolylineElement(svgPolylineElement);

+				if (result == null) result = caseSvgElement(svgPolylineElement);

+				if (result == null) result = caseBasicShapeElement(svgPolylineElement);

+				if (result == null) result = caseGraphicsElement(svgPolylineElement);

+				if (result == null) result = caseShapeElement(svgPolylineElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgPolylineElement);

+				if (result == null) result = caseCoreAttributes(svgPolylineElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgPolylineElement);

+				if (result == null) result = casePresentationAttributes(svgPolylineElement);

+				if (result == null) result = caseContentElement(svgPolylineElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_POLYGON_ELEMENT: {

+				SvgPolygonElement svgPolygonElement = (SvgPolygonElement)theEObject;

+				T1 result = caseSvgPolygonElement(svgPolygonElement);

+				if (result == null) result = caseSvgElement(svgPolygonElement);

+				if (result == null) result = caseBasicShapeElement(svgPolygonElement);

+				if (result == null) result = caseGraphicsElement(svgPolygonElement);

+				if (result == null) result = caseShapeElement(svgPolygonElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgPolygonElement);

+				if (result == null) result = caseCoreAttributes(svgPolygonElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgPolygonElement);

+				if (result == null) result = casePresentationAttributes(svgPolygonElement);

+				if (result == null) result = caseContentElement(svgPolygonElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_TEXT_ELEMENT: {

+				SvgTextElement svgTextElement = (SvgTextElement)theEObject;

+				T1 result = caseSvgTextElement(svgTextElement);

+				if (result == null) result = caseSvgElement(svgTextElement);

+				if (result == null) result = caseGraphicsElement(svgTextElement);

+				if (result == null) result = caseTextContentElement(svgTextElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgTextElement);

+				if (result == null) result = caseCoreAttributes(svgTextElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgTextElement);

+				if (result == null) result = casePresentationAttributes(svgTextElement);

+				if (result == null) result = caseContentElement(svgTextElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_TSPAN_ELEMENT: {

+				SvgTspanElement svgTspanElement = (SvgTspanElement)theEObject;

+				T1 result = caseSvgTspanElement(svgTspanElement);

+				if (result == null) result = caseSvgElement(svgTspanElement);

+				if (result == null) result = caseTextContentElement(svgTspanElement);

+				if (result == null) result = caseTextContentChildElement(svgTspanElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgTspanElement);

+				if (result == null) result = caseCoreAttributes(svgTspanElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgTspanElement);

+				if (result == null) result = casePresentationAttributes(svgTspanElement);

+				if (result == null) result = caseContentElement(svgTspanElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_TREF_ELEMENT: {

+				SvgTrefElement svgTrefElement = (SvgTrefElement)theEObject;

+				T1 result = caseSvgTrefElement(svgTrefElement);

+				if (result == null) result = caseSvgElement(svgTrefElement);

+				if (result == null) result = caseTextContentElement(svgTrefElement);

+				if (result == null) result = caseTextContentChildElement(svgTrefElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgTrefElement);

+				if (result == null) result = caseCoreAttributes(svgTrefElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgTrefElement);

+				if (result == null) result = casePresentationAttributes(svgTrefElement);

+				if (result == null) result = caseXLinkAttributes(svgTrefElement);

+				if (result == null) result = caseContentElement(svgTrefElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_TEXT_PATH_ELEMENT: {

+				SvgTextPathElement svgTextPathElement = (SvgTextPathElement)theEObject;

+				T1 result = caseSvgTextPathElement(svgTextPathElement);

+				if (result == null) result = caseSvgElement(svgTextPathElement);

+				if (result == null) result = caseTextContentElement(svgTextPathElement);

+				if (result == null) result = caseTextContentChildElement(svgTextPathElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgTextPathElement);

+				if (result == null) result = caseCoreAttributes(svgTextPathElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgTextPathElement);

+				if (result == null) result = casePresentationAttributes(svgTextPathElement);

+				if (result == null) result = caseXLinkAttributes(svgTextPathElement);

+				if (result == null) result = caseContentElement(svgTextPathElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ALT_GLYPH_ELEMENT: {

+				SvgAltGlyphElement svgAltGlyphElement = (SvgAltGlyphElement)theEObject;

+				T1 result = caseSvgAltGlyphElement(svgAltGlyphElement);

+				if (result == null) result = caseSvgElement(svgAltGlyphElement);

+				if (result == null) result = caseTextContentElement(svgAltGlyphElement);

+				if (result == null) result = caseTextContentChildElement(svgAltGlyphElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgAltGlyphElement);

+				if (result == null) result = caseCoreAttributes(svgAltGlyphElement);

+				if (result == null) result = caseGraphicalEventAttributes(svgAltGlyphElement);

+				if (result == null) result = casePresentationAttributes(svgAltGlyphElement);

+				if (result == null) result = caseXLinkAttributes(svgAltGlyphElement);

+				if (result == null) result = caseContentElement(svgAltGlyphElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ALT_GLYPH_DEF_ELEMENT: {

+				SvgAltGlyphDefElement svgAltGlyphDefElement = (SvgAltGlyphDefElement)theEObject;

+				T1 result = caseSvgAltGlyphDefElement(svgAltGlyphDefElement);

+				if (result == null) result = caseSvgElement(svgAltGlyphDefElement);

+				if (result == null) result = caseCoreAttributes(svgAltGlyphDefElement);

+				if (result == null) result = caseContentElement(svgAltGlyphDefElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ALT_GLYPH_ITEM_ELEMENT: {

+				SvgAltGlyphItemElement svgAltGlyphItemElement = (SvgAltGlyphItemElement)theEObject;

+				T1 result = caseSvgAltGlyphItemElement(svgAltGlyphItemElement);

+				if (result == null) result = caseSvgElement(svgAltGlyphItemElement);

+				if (result == null) result = caseCoreAttributes(svgAltGlyphItemElement);

+				if (result == null) result = caseContentElement(svgAltGlyphItemElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ALT_GLYPH_REF_ELEMENT: {

+				SvgAltGlyphRefElement svgAltGlyphRefElement = (SvgAltGlyphRefElement)theEObject;

+				T1 result = caseSvgAltGlyphRefElement(svgAltGlyphRefElement);

+				if (result == null) result = caseSvgElement(svgAltGlyphRefElement);

+				if (result == null) result = caseCoreAttributes(svgAltGlyphRefElement);

+				if (result == null) result = casePresentationAttributes(svgAltGlyphRefElement);

+				if (result == null) result = caseXLinkAttributes(svgAltGlyphRefElement);

+				if (result == null) result = caseContentElement(svgAltGlyphRefElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_MARKER_ELEMENT: {

+				SvgMarkerElement svgMarkerElement = (SvgMarkerElement)theEObject;

+				T1 result = caseSvgMarkerElement(svgMarkerElement);

+				if (result == null) result = caseSvgElement(svgMarkerElement);

+				if (result == null) result = caseCoreAttributes(svgMarkerElement);

+				if (result == null) result = casePresentationAttributes(svgMarkerElement);

+				if (result == null) result = caseContentElement(svgMarkerElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_COLOR_PROFILE_ELEMENT: {

+				SvgColorProfileElement svgColorProfileElement = (SvgColorProfileElement)theEObject;

+				T1 result = caseSvgColorProfileElement(svgColorProfileElement);

+				if (result == null) result = caseSvgElement(svgColorProfileElement);

+				if (result == null) result = caseCoreAttributes(svgColorProfileElement);

+				if (result == null) result = casePresentationAttributes(svgColorProfileElement);

+				if (result == null) result = caseXLinkAttributes(svgColorProfileElement);

+				if (result == null) result = caseContentElement(svgColorProfileElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_LINEAR_GRADIENT_ELEMENT: {

+				SvgLinearGradientElement svgLinearGradientElement = (SvgLinearGradientElement)theEObject;

+				T1 result = caseSvgLinearGradientElement(svgLinearGradientElement);

+				if (result == null) result = caseSvgElement(svgLinearGradientElement);

+				if (result == null) result = caseGradientElement(svgLinearGradientElement);

+				if (result == null) result = caseCoreAttributes(svgLinearGradientElement);

+				if (result == null) result = casePresentationAttributes(svgLinearGradientElement);

+				if (result == null) result = caseXLinkAttributes(svgLinearGradientElement);

+				if (result == null) result = caseContentElement(svgLinearGradientElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_RADIAL_GRADIENT_ELEMENT: {

+				SvgRadialGradientElement svgRadialGradientElement = (SvgRadialGradientElement)theEObject;

+				T1 result = caseSvgRadialGradientElement(svgRadialGradientElement);

+				if (result == null) result = caseSvgElement(svgRadialGradientElement);

+				if (result == null) result = caseGradientElement(svgRadialGradientElement);

+				if (result == null) result = caseCoreAttributes(svgRadialGradientElement);

+				if (result == null) result = casePresentationAttributes(svgRadialGradientElement);

+				if (result == null) result = caseXLinkAttributes(svgRadialGradientElement);

+				if (result == null) result = caseContentElement(svgRadialGradientElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_STOP_ELEMENT: {

+				SvgStopElement svgStopElement = (SvgStopElement)theEObject;

+				T1 result = caseSvgStopElement(svgStopElement);

+				if (result == null) result = caseSvgElement(svgStopElement);

+				if (result == null) result = caseCoreAttributes(svgStopElement);

+				if (result == null) result = casePresentationAttributes(svgStopElement);

+				if (result == null) result = caseContentElement(svgStopElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_PATTERN_ELEMENT: {

+				SvgPatternElement svgPatternElement = (SvgPatternElement)theEObject;

+				T1 result = caseSvgPatternElement(svgPatternElement);

+				if (result == null) result = caseSvgElement(svgPatternElement);

+				if (result == null) result = caseContainerElement(svgPatternElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgPatternElement);

+				if (result == null) result = caseCoreAttributes(svgPatternElement);

+				if (result == null) result = casePresentationAttributes(svgPatternElement);

+				if (result == null) result = caseXLinkAttributes(svgPatternElement);

+				if (result == null) result = caseContentElement(svgPatternElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_CLIP_PATH_ELEMENT: {

+				SvgClipPathElement svgClipPathElement = (SvgClipPathElement)theEObject;

+				T1 result = caseSvgClipPathElement(svgClipPathElement);

+				if (result == null) result = caseSvgElement(svgClipPathElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgClipPathElement);

+				if (result == null) result = caseCoreAttributes(svgClipPathElement);

+				if (result == null) result = casePresentationAttributes(svgClipPathElement);

+				if (result == null) result = caseContentElement(svgClipPathElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_MASK_ELEMENT: {

+				SvgMaskElement svgMaskElement = (SvgMaskElement)theEObject;

+				T1 result = caseSvgMaskElement(svgMaskElement);

+				if (result == null) result = caseSvgElement(svgMaskElement);

+				if (result == null) result = caseConditionalProcessingAttributes(svgMaskElement);

+				if (result == null) result = caseCoreAttributes(svgMaskElement);

+				if (result == null) result = casePresentationAttributes(svgMaskElement);

+				if (result == null) result = caseContentElement(svgMaskElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FILTER_ELEMENT: {

+				SvgFilterElement svgFilterElement = (SvgFilterElement)theEObject;

+				T1 result = caseSvgFilterElement(svgFilterElement);

+				if (result == null) result = caseSvgElement(svgFilterElement);

+				if (result == null) result = caseCoreAttributes(svgFilterElement);

+				if (result == null) result = casePresentationAttributes(svgFilterElement);

+				if (result == null) result = caseXLinkAttributes(svgFilterElement);

+				if (result == null) result = caseContentElement(svgFilterElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_DISTANT_LIGHT_ELEMENT: {

+				SvgFeDistantLightElement svgFeDistantLightElement = (SvgFeDistantLightElement)theEObject;

+				T1 result = caseSvgFeDistantLightElement(svgFeDistantLightElement);

+				if (result == null) result = caseSvgElement(svgFeDistantLightElement);

+				if (result == null) result = caseCoreAttributes(svgFeDistantLightElement);

+				if (result == null) result = caseContentElement(svgFeDistantLightElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_POINT_LIGHT_ELEMENT: {

+				SvgFePointLightElement svgFePointLightElement = (SvgFePointLightElement)theEObject;

+				T1 result = caseSvgFePointLightElement(svgFePointLightElement);

+				if (result == null) result = caseSvgElement(svgFePointLightElement);

+				if (result == null) result = caseCoreAttributes(svgFePointLightElement);

+				if (result == null) result = caseLightSourceElement(svgFePointLightElement);

+				if (result == null) result = caseContentElement(svgFePointLightElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_SPOT_LIGHT_ELEMENT: {

+				SvgFeSpotLightElement svgFeSpotLightElement = (SvgFeSpotLightElement)theEObject;

+				T1 result = caseSvgFeSpotLightElement(svgFeSpotLightElement);

+				if (result == null) result = caseSvgElement(svgFeSpotLightElement);

+				if (result == null) result = caseCoreAttributes(svgFeSpotLightElement);

+				if (result == null) result = caseLightSourceElement(svgFeSpotLightElement);

+				if (result == null) result = caseContentElement(svgFeSpotLightElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_BLEND_ELEMENT: {

+				SvgFeBlendElement svgFeBlendElement = (SvgFeBlendElement)theEObject;

+				T1 result = caseSvgFeBlendElement(svgFeBlendElement);

+				if (result == null) result = caseSvgElement(svgFeBlendElement);

+				if (result == null) result = caseCoreAttributes(svgFeBlendElement);

+				if (result == null) result = casePresentationAttributes(svgFeBlendElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeBlendElement);

+				if (result == null) result = caseContentElement(svgFeBlendElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_COLOR_MATRIX_ELEMENT: {

+				SvgFeColorMatrixElement svgFeColorMatrixElement = (SvgFeColorMatrixElement)theEObject;

+				T1 result = caseSvgFeColorMatrixElement(svgFeColorMatrixElement);

+				if (result == null) result = caseSvgElement(svgFeColorMatrixElement);

+				if (result == null) result = caseCoreAttributes(svgFeColorMatrixElement);

+				if (result == null) result = casePresentationAttributes(svgFeColorMatrixElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeColorMatrixElement);

+				if (result == null) result = caseContentElement(svgFeColorMatrixElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_COMPONENT_TRANSFER_ELEMENT: {

+				SvgFeComponentTransferElement svgFeComponentTransferElement = (SvgFeComponentTransferElement)theEObject;

+				T1 result = caseSvgFeComponentTransferElement(svgFeComponentTransferElement);

+				if (result == null) result = caseSvgElement(svgFeComponentTransferElement);

+				if (result == null) result = caseCoreAttributes(svgFeComponentTransferElement);

+				if (result == null) result = casePresentationAttributes(svgFeComponentTransferElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeComponentTransferElement);

+				if (result == null) result = caseContentElement(svgFeComponentTransferElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_FUNC_RELEMENT: {

+				SvgFeFuncRElement svgFeFuncRElement = (SvgFeFuncRElement)theEObject;

+				T1 result = caseSvgFeFuncRElement(svgFeFuncRElement);

+				if (result == null) result = caseSvgElement(svgFeFuncRElement);

+				if (result == null) result = caseCoreAttributes(svgFeFuncRElement);

+				if (result == null) result = casePresentationAttributes(svgFeFuncRElement);

+				if (result == null) result = caseContentElement(svgFeFuncRElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_FUNC_GELEMENT: {

+				SvgFeFuncGElement svgFeFuncGElement = (SvgFeFuncGElement)theEObject;

+				T1 result = caseSvgFeFuncGElement(svgFeFuncGElement);

+				if (result == null) result = caseSvgElement(svgFeFuncGElement);

+				if (result == null) result = caseCoreAttributes(svgFeFuncGElement);

+				if (result == null) result = casePresentationAttributes(svgFeFuncGElement);

+				if (result == null) result = caseContentElement(svgFeFuncGElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_FUNC_BELEMENT: {

+				SvgFeFuncBElement svgFeFuncBElement = (SvgFeFuncBElement)theEObject;

+				T1 result = caseSvgFeFuncBElement(svgFeFuncBElement);

+				if (result == null) result = caseSvgElement(svgFeFuncBElement);

+				if (result == null) result = caseCoreAttributes(svgFeFuncBElement);

+				if (result == null) result = casePresentationAttributes(svgFeFuncBElement);

+				if (result == null) result = caseContentElement(svgFeFuncBElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_FUNC_AELEMENT: {

+				SvgFeFuncAElement svgFeFuncAElement = (SvgFeFuncAElement)theEObject;

+				T1 result = caseSvgFeFuncAElement(svgFeFuncAElement);

+				if (result == null) result = caseSvgElement(svgFeFuncAElement);

+				if (result == null) result = caseCoreAttributes(svgFeFuncAElement);

+				if (result == null) result = casePresentationAttributes(svgFeFuncAElement);

+				if (result == null) result = caseContentElement(svgFeFuncAElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_COMPOSITE_ELEMENT: {

+				SvgFeCompositeElement svgFeCompositeElement = (SvgFeCompositeElement)theEObject;

+				T1 result = caseSvgFeCompositeElement(svgFeCompositeElement);

+				if (result == null) result = caseSvgElement(svgFeCompositeElement);

+				if (result == null) result = caseCoreAttributes(svgFeCompositeElement);

+				if (result == null) result = casePresentationAttributes(svgFeCompositeElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeCompositeElement);

+				if (result == null) result = caseContentElement(svgFeCompositeElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_CONVOLVE_MATRIX_ELEMENT: {

+				SvgFeConvolveMatrixElement svgFeConvolveMatrixElement = (SvgFeConvolveMatrixElement)theEObject;

+				T1 result = caseSvgFeConvolveMatrixElement(svgFeConvolveMatrixElement);

+				if (result == null) result = caseSvgElement(svgFeConvolveMatrixElement);

+				if (result == null) result = caseCoreAttributes(svgFeConvolveMatrixElement);

+				if (result == null) result = casePresentationAttributes(svgFeConvolveMatrixElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeConvolveMatrixElement);

+				if (result == null) result = caseContentElement(svgFeConvolveMatrixElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_DIFFUSE_LIGHTING_ELEMENT: {

+				SvgFeDiffuseLightingElement svgFeDiffuseLightingElement = (SvgFeDiffuseLightingElement)theEObject;

+				T1 result = caseSvgFeDiffuseLightingElement(svgFeDiffuseLightingElement);

+				if (result == null) result = caseSvgElement(svgFeDiffuseLightingElement);

+				if (result == null) result = caseCoreAttributes(svgFeDiffuseLightingElement);

+				if (result == null) result = casePresentationAttributes(svgFeDiffuseLightingElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeDiffuseLightingElement);

+				if (result == null) result = caseContentElement(svgFeDiffuseLightingElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_DISPLACEMENT_MAP_ELEMENT: {

+				SvgFeDisplacementMapElement svgFeDisplacementMapElement = (SvgFeDisplacementMapElement)theEObject;

+				T1 result = caseSvgFeDisplacementMapElement(svgFeDisplacementMapElement);

+				if (result == null) result = caseSvgElement(svgFeDisplacementMapElement);

+				if (result == null) result = caseCoreAttributes(svgFeDisplacementMapElement);

+				if (result == null) result = casePresentationAttributes(svgFeDisplacementMapElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeDisplacementMapElement);

+				if (result == null) result = caseContentElement(svgFeDisplacementMapElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_FLOOD_ELEMENT: {

+				SvgFeFloodElement svgFeFloodElement = (SvgFeFloodElement)theEObject;

+				T1 result = caseSvgFeFloodElement(svgFeFloodElement);

+				if (result == null) result = caseSvgElement(svgFeFloodElement);

+				if (result == null) result = caseCoreAttributes(svgFeFloodElement);

+				if (result == null) result = casePresentationAttributes(svgFeFloodElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeFloodElement);

+				if (result == null) result = caseContentElement(svgFeFloodElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_GAUSSIAN_BLUR_ELEMENT: {

+				SvgFeGaussianBlurElement svgFeGaussianBlurElement = (SvgFeGaussianBlurElement)theEObject;

+				T1 result = caseSvgFeGaussianBlurElement(svgFeGaussianBlurElement);

+				if (result == null) result = caseSvgElement(svgFeGaussianBlurElement);

+				if (result == null) result = caseCoreAttributes(svgFeGaussianBlurElement);

+				if (result == null) result = casePresentationAttributes(svgFeGaussianBlurElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeGaussianBlurElement);

+				if (result == null) result = caseContentElement(svgFeGaussianBlurElement);

+				if (result == null) result = caseFilterPrimitiveElement(svgFeGaussianBlurElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_IMAGE_ELEMENT: {

+				SvgFeImageElement svgFeImageElement = (SvgFeImageElement)theEObject;

+				T1 result = caseSvgFeImageElement(svgFeImageElement);

+				if (result == null) result = caseSvgElement(svgFeImageElement);

+				if (result == null) result = caseCoreAttributes(svgFeImageElement);

+				if (result == null) result = casePresentationAttributes(svgFeImageElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeImageElement);

+				if (result == null) result = caseXLinkAttributes(svgFeImageElement);

+				if (result == null) result = caseContentElement(svgFeImageElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_MERGE_ELEMENT: {

+				SvgFeMergeElement svgFeMergeElement = (SvgFeMergeElement)theEObject;

+				T1 result = caseSvgFeMergeElement(svgFeMergeElement);

+				if (result == null) result = caseSvgElement(svgFeMergeElement);

+				if (result == null) result = caseCoreAttributes(svgFeMergeElement);

+				if (result == null) result = casePresentationAttributes(svgFeMergeElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeMergeElement);

+				if (result == null) result = caseContentElement(svgFeMergeElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_MERGE_NODE_ELEMENT: {

+				SvgFeMergeNodeElement svgFeMergeNodeElement = (SvgFeMergeNodeElement)theEObject;

+				T1 result = caseSvgFeMergeNodeElement(svgFeMergeNodeElement);

+				if (result == null) result = caseSvgElement(svgFeMergeNodeElement);

+				if (result == null) result = caseCoreAttributes(svgFeMergeNodeElement);

+				if (result == null) result = caseContentElement(svgFeMergeNodeElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_MORPHOLOGY_ELEMENT: {

+				SvgFeMorphologyElement svgFeMorphologyElement = (SvgFeMorphologyElement)theEObject;

+				T1 result = caseSvgFeMorphologyElement(svgFeMorphologyElement);

+				if (result == null) result = caseSvgElement(svgFeMorphologyElement);

+				if (result == null) result = caseCoreAttributes(svgFeMorphologyElement);

+				if (result == null) result = casePresentationAttributes(svgFeMorphologyElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeMorphologyElement);

+				if (result == null) result = caseContentElement(svgFeMorphologyElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_OFFSET_ELEMENT: {

+				SvgFeOffsetElement svgFeOffsetElement = (SvgFeOffsetElement)theEObject;

+				T1 result = caseSvgFeOffsetElement(svgFeOffsetElement);

+				if (result == null) result = caseSvgElement(svgFeOffsetElement);

+				if (result == null) result = caseCoreAttributes(svgFeOffsetElement);

+				if (result == null) result = casePresentationAttributes(svgFeOffsetElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeOffsetElement);

+				if (result == null) result = caseContentElement(svgFeOffsetElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_SPECULAR_LIGHTING_ELEMENT: {

+				SvgFeSpecularLightingElement svgFeSpecularLightingElement = (SvgFeSpecularLightingElement)theEObject;

+				T1 result = caseSvgFeSpecularLightingElement(svgFeSpecularLightingElement);

+				if (result == null) result = caseSvgElement(svgFeSpecularLightingElement);

+				if (result == null) result = caseCoreAttributes(svgFeSpecularLightingElement);

+				if (result == null) result = casePresentationAttributes(svgFeSpecularLightingElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeSpecularLightingElement);

+				if (result == null) result = caseContentElement(svgFeSpecularLightingElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_TILE_ELEMENT: {

+				SvgFeTileElement svgFeTileElement = (SvgFeTileElement)theEObject;

+				T1 result = caseSvgFeTileElement(svgFeTileElement);

+				if (result == null) result = caseSvgElement(svgFeTileElement);

+				if (result == null) result = caseCoreAttributes(svgFeTileElement);

+				if (result == null) result = casePresentationAttributes(svgFeTileElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeTileElement);

+				if (result == null) result = caseContentElement(svgFeTileElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_FE_TURBULENCE_ELEMENT: {

+				SvgFeTurbulenceElement svgFeTurbulenceElement = (SvgFeTurbulenceElement)theEObject;

+				T1 result = caseSvgFeTurbulenceElement(svgFeTurbulenceElement);

+				if (result == null) result = caseSvgElement(svgFeTurbulenceElement);

+				if (result == null) result = caseCoreAttributes(svgFeTurbulenceElement);

+				if (result == null) result = casePresentationAttributes(svgFeTurbulenceElement);

+				if (result == null) result = caseFilterPrimitiveAttributes(svgFeTurbulenceElement);

+				if (result == null) result = caseContentElement(svgFeTurbulenceElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_ANIMATE_ELEMENT: {

+				SvgAnimateElement svgAnimateElement = (SvgAnimateElement)theEObject;

+				T1 result = caseSvgAnimateElement(svgAnimateElement);

+				if (result == null) result = caseSvgElement(svgAnimateElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case SvgPackage.SVG_METADATA_ELEMENT: {

+				SvgMetadataElement svgMetadataElement = (SvgMetadataElement)theEObject;

+				T1 result = caseSvgMetadataElement(svgMetadataElement);

+				if (result == null) result = caseSvgElement(svgMetadataElement);

+				if (result == null) result = caseCoreAttributes(svgMetadataElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Content Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Content Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T extends SvgElement> T1 caseContentElement(ContentElement<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Container Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Container Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T extends SvgElement> T1 caseContainerElement(ContainerElement<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Structural Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Structural Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStructuralElement(StructuralElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgElement(SvgElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Descriptive Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Descriptive Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDescriptiveElement(DescriptiveElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Graphics Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Graphics Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseGraphicsElement(GraphicsElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Graphics Referencing Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Graphics Referencing Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseGraphicsReferencingElement(GraphicsReferencingElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Shape Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Shape Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseShapeElement(ShapeElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Basic Shape Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Basic Shape Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseBasicShapeElement(BasicShapeElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Text Content Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Text Content Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseTextContentElement(TextContentElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Text Content Child Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Text Content Child Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseTextContentChildElement(TextContentChildElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Gradient Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Gradient Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseGradientElement(GradientElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Light Source Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Light Source Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseLightSourceElement(LightSourceElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Filter Primitive Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Filter Primitive Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseFilterPrimitiveElement(FilterPrimitiveElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Animation Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Animation Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseAnimationElement(AnimationElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>ENUMS </em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>ENUMS </em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 case____ENUMS____(____ENUMS____ object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DATATYPES </em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DATATYPES </em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 case____DATATYPES____(____DATATYPES____ object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>ATTRIBUTES </em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>ATTRIBUTES </em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 case____ATTRIBUTES____(____ATTRIBUTES____ object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Conditional Processing Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Conditional Processing Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseConditionalProcessingAttributes(ConditionalProcessingAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Core Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Core Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseCoreAttributes(CoreAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Document Event Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Document Event Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDocumentEventAttributes(DocumentEventAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Graphical Event Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Graphical Event Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseGraphicalEventAttributes(GraphicalEventAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Presentation Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Presentation Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 casePresentationAttributes(PresentationAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>XLink Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>XLink Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseXLinkAttributes(XLinkAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Filter Primitive Attributes</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Filter Primitive Attributes</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseFilterPrimitiveAttributes(FilterPrimitiveAttributes object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>ELEMENTES </em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>ELEMENTES </em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 case____ELEMENTES____(____ELEMENTES____ object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Svg Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Svg Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgSvgElement(SvgSvgElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>GElement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>GElement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgGElement(SvgGElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Defs Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Defs Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgDefsElement(SvgDefsElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Desc Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Desc Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgDescElement(SvgDescElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Title Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Title Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgTitleElement(SvgTitleElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Symbol Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Symbol Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgSymbolElement(SvgSymbolElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Use Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Use Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgUseElement(SvgUseElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Image Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Image Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgImageElement(SvgImageElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Switch Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Switch Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgSwitchElement(SvgSwitchElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Path Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Path Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgPathElement(SvgPathElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Rect Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Rect Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgRectElement(SvgRectElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Circle Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Circle Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgCircleElement(SvgCircleElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Ellipse Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Ellipse Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgEllipseElement(SvgEllipseElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Line Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Line Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgLineElement(SvgLineElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Polyline Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Polyline Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgPolylineElement(SvgPolylineElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Polygon Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Polygon Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgPolygonElement(SvgPolygonElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Text Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Text Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgTextElement(SvgTextElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Tspan Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Tspan Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgTspanElement(SvgTspanElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Tref Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Tref Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgTrefElement(SvgTrefElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Text Path Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Text Path Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgTextPathElement(SvgTextPathElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgAltGlyphElement(SvgAltGlyphElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Def Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Def Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgAltGlyphDefElement(SvgAltGlyphDefElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Item Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Item Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgAltGlyphItemElement(SvgAltGlyphItemElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Alt Glyph Ref Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Alt Glyph Ref Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgAltGlyphRefElement(SvgAltGlyphRefElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Marker Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Marker Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgMarkerElement(SvgMarkerElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Color Profile Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Color Profile Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgColorProfileElement(SvgColorProfileElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Linear Gradient Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Linear Gradient Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgLinearGradientElement(SvgLinearGradientElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Radial Gradient Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Radial Gradient Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgRadialGradientElement(SvgRadialGradientElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Stop Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Stop Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgStopElement(SvgStopElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Pattern Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Pattern Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgPatternElement(SvgPatternElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Clip Path Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Clip Path Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgClipPathElement(SvgClipPathElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Mask Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Mask Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgMaskElement(SvgMaskElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Filter Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Filter Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFilterElement(SvgFilterElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Distant Light Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Distant Light Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeDistantLightElement(SvgFeDistantLightElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Point Light Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Point Light Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFePointLightElement(SvgFePointLightElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Spot Light Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Spot Light Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeSpotLightElement(SvgFeSpotLightElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Blend Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Blend Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeBlendElement(SvgFeBlendElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Color Matrix Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Color Matrix Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeColorMatrixElement(SvgFeColorMatrixElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Component Transfer Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Component Transfer Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeComponentTransferElement(SvgFeComponentTransferElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Func RElement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Func RElement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeFuncRElement(SvgFeFuncRElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Func GElement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Func GElement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeFuncGElement(SvgFeFuncGElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Func BElement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Func BElement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeFuncBElement(SvgFeFuncBElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Func AElement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Func AElement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeFuncAElement(SvgFeFuncAElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Composite Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Composite Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeCompositeElement(SvgFeCompositeElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Convolve Matrix Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Convolve Matrix Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeConvolveMatrixElement(SvgFeConvolveMatrixElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Diffuse Lighting Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Diffuse Lighting Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeDiffuseLightingElement(SvgFeDiffuseLightingElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Displacement Map Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Displacement Map Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeDisplacementMapElement(SvgFeDisplacementMapElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Flood Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Flood Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeFloodElement(SvgFeFloodElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Gaussian Blur Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Gaussian Blur Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeGaussianBlurElement(SvgFeGaussianBlurElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Image Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Image Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeImageElement(SvgFeImageElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Merge Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Merge Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeMergeElement(SvgFeMergeElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Merge Node Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Merge Node Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeMergeNodeElement(SvgFeMergeNodeElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Morphology Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Morphology Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeMorphologyElement(SvgFeMorphologyElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Offset Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Offset Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeOffsetElement(SvgFeOffsetElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Specular Lighting Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Specular Lighting Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeSpecularLightingElement(SvgFeSpecularLightingElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Tile Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Tile Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeTileElement(SvgFeTileElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Fe Turbulence Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Fe Turbulence Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgFeTurbulenceElement(SvgFeTurbulenceElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Animate Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Animate Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgAnimateElement(SvgAnimateElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Metadata Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Metadata Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSvgMetadataElement(SvgMetadataElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	@Override

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //SvgSwitch

diff --git a/bundles/runtime/org.eclipse.fx.javafx/pom.xml b/bundles/runtime/org.eclipse.fx.javafx/pom.xml
index 8520a31..6e0086f 100755
--- a/bundles/runtime/org.eclipse.fx.javafx/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.javafx/pom.xml
@@ -11,7 +11,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.shared.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.json.schema/src-gen/org/eclipse/fx/json/schema/gson/GsonJsonSchemaMapImpl.java b/bundles/runtime/org.eclipse.fx.json.schema/src-gen/org/eclipse/fx/json/schema/gson/GsonJsonSchemaMapImpl.java
index bd1d213..e6c5ebc 100644
--- a/bundles/runtime/org.eclipse.fx.json.schema/src-gen/org/eclipse/fx/json/schema/gson/GsonJsonSchemaMapImpl.java
+++ b/bundles/runtime/org.eclipse.fx.json.schema/src-gen/org/eclipse/fx/json/schema/gson/GsonJsonSchemaMapImpl.java
@@ -14,6 +14,9 @@
 	public JsonObject toJSONObject() {
 		JsonObject o = new JsonObject();
 		o.addProperty( "$gtype", "JsonSchemaMap" );
+		for( java.util.Map.Entry<String,JsonSchema> e : this.propertyMap ) {
+			o.add( e.getKey(), ((GsonBase)e.getValue()).toJSONObject() );
+		}
 		return o;
 	}
 
@@ -26,6 +29,9 @@
 	private static java.util.Map<String,JsonSchema> toMap(JsonObject o) {
 		java.util.Map<String,JsonSchema> rv = new java.util.HashMap<>();
 		for( java.util.Map.Entry<String,com.google.gson.JsonElement> e : o.entrySet() ) {
+			if( e.getKey().startsWith("$") ) {
+				continue;
+			}
 			rv.put( e.getKey(), GsonElementFactory.createJsonSchema(e.getValue().getAsJsonObject()) );
 		}
 		return rv;
diff --git a/bundles/runtime/org.eclipse.fx.osgi.util/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.osgi.util/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.osgi.util/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.osgi.util/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.osgi.util/META-INF/MANIFEST.MF
index c0ed697..9ab666d 100755
--- a/bundles/runtime/org.eclipse.fx.osgi.util/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.osgi.util/META-INF/MANIFEST.MF
@@ -2,18 +2,18 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.osgi.util
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.inject;version="1.0.0",
  org.eclipse.equinox.app;version="1.1.0";resolution:=optional,
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.databinding;version="2.6.0";resolution:=optional,
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.databinding;version="3.0.0";resolution:=optional,
  org.osgi.framework;version="1.6.0",
  org.osgi.framework.wiring;version="1.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
  org.osgi.service.event;version="1.3.0";resolution:=optional,
  org.osgi.service.url;version="1.0.0"
-Export-Package: org.eclipse.fx.osgi.util;version="2.6.0"
+Export-Package: org.eclipse.fx.osgi.util;version="3.0.0"
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
  org.eclipse.core.databinding.observable;bundle-version="1.4.1";resolution:=optional,
diff --git a/bundles/runtime/org.eclipse.fx.osgi.util/pom.xml b/bundles/runtime/org.eclipse.fx.osgi.util/pom.xml
index 869b39d..b55dc35 100755
--- a/bundles/runtime/org.eclipse.fx.osgi.util/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.osgi.util/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.osgi/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.osgi/META-INF/MANIFEST.MF
index a0ca6e0..af390dd 100755
--- a/bundles/runtime/org.eclipse.fx.osgi/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.osgi/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.osgi
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Fragment-Host: org.eclipse.osgi;bundle-version="3.10.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/runtime/org.eclipse.fx.osgi/pom.xml b/bundles/runtime/org.eclipse.fx.osgi/pom.xml
index 83d4ba2..2e3856d 100755
--- a/bundles/runtime/org.eclipse.fx.osgi/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.osgi/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.shared.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.animation/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.animation/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.animation/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.animation/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.animation/META-INF/MANIFEST.MF
index 3797378..290783f 100755
--- a/bundles/runtime/org.eclipse.fx.ui.animation/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.animation/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Animationutils
 Bundle-SymbolicName: org.eclipse.fx.ui.animation;singleton:=true
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: Eclipse.org
-Export-Package: org.eclipse.fx.ui.animation;version="2.6.0",
- org.eclipse.fx.ui.animation.morph;version="2.6.0",
- org.eclipse.fx.ui.animation.pagetransition;version="2.6.0",
- org.eclipse.fx.ui.animation.pagetransition.animation;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.animation;version="3.0.0",
+ org.eclipse.fx.ui.animation.morph;version="3.0.0",
+ org.eclipse.fx.ui.animation.pagetransition;version="3.0.0",
+ org.eclipse.fx.ui.animation.pagetransition.animation;version="3.0.0"
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
diff --git a/bundles/runtime/org.eclipse.fx.ui.animation/pom.xml b/bundles/runtime/org.eclipse.fx.ui.animation/pom.xml
index 34a90da..0ee11f8 100755
--- a/bundles/runtime/org.eclipse.fx.ui.animation/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.animation/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.controls/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.controls/META-INF/MANIFEST.MF
index c412b38..faefbdc 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/META-INF/MANIFEST.MF
@@ -2,38 +2,41 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Controls
 Bundle-SymbolicName: org.eclipse.fx.ui.controls
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.ui.controls;version="2.6.0",
- org.eclipse.fx.ui.controls.dialog;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.controls.dnd;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.controls.filesystem;version="2.6.0",
- org.eclipse.fx.ui.controls.form;x-internal:=true,
- org.eclipse.fx.ui.controls.image;version="2.6.0",
- org.eclipse.fx.ui.controls.list;version="2.6.0",
- org.eclipse.fx.ui.controls.markers;version="2.6.0",
- org.eclipse.fx.ui.controls.media;version="2.6.0",
- org.eclipse.fx.ui.controls.paint;version="2.6.0",
- org.eclipse.fx.ui.controls.sceneviewer;version="2.6.0",
- org.eclipse.fx.ui.controls.stage;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.controls.styledtext;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.controls.styledtext.behavior;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.controls.styledtext.events;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.controls.styledtext.model;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.controls.styledtext.skin;version="2.6.0";x-internal:=true,
+Export-Package: org.eclipse.fx.ui.controls;version="3.0.0",
+ org.eclipse.fx.ui.controls.dialog;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.dnd;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.controls.filesystem;version="3.0.0",
+ org.eclipse.fx.ui.controls.form;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.image;version="3.0.0",
+ org.eclipse.fx.ui.controls.list;version="3.0.0",
+ org.eclipse.fx.ui.controls.markers;version="3.0.0",
+ org.eclipse.fx.ui.controls.media;version="3.0.0",
+ org.eclipse.fx.ui.controls.paint;version="3.0.0",
+ org.eclipse.fx.ui.controls.sceneviewer;version="3.0.0",
+ org.eclipse.fx.ui.controls.stage;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.controls.styledtext;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.styledtext.behavior;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.styledtext.events;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.styledtext.model;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.controls.styledtext.skin;version="3.0.0";x-internal:=true,
  org.eclipse.fx.ui.controls.table,
- org.eclipse.fx.ui.controls.tabpane;version="2.6.0",
- org.eclipse.fx.ui.controls.tree;version="2.6.0",
- org.eclipse.fx.ui.controls.vectorgraphics;version="2.6.0"
+ org.eclipse.fx.ui.controls.tabpane;version="3.0.0",
+ org.eclipse.fx.ui.controls.tree;version="3.0.0",
+ org.eclipse.fx.ui.controls.vectorgraphics;version="3.0.0"
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.controls.styledtext.UnderlineStrategyFactory.xml,
  OSGI-INF/services/org.eclipse.fx.ui.controls.image.fontawesome.FontAwesomeIconFontProvider.xml,
- OSGI-INF/services/org.eclipse.fx.ui.controls.form.GraphicDecorator.xml
+ OSGI-INF/services/org.eclipse.fx.ui.controls.form.GraphicDecorator.xml,
+ OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider.xml
 Bundle-Vendor: Eclipse.org
 Import-Package: com.google.common.collect;version="15.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.property;version="2.6.0",
- org.eclipse.fx.core.text;version="2.6.0",
- org.eclipse.fx.ui.panes;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.property;version="3.0.0",
+ org.eclipse.fx.core.text;version="3.0.0",
+ org.eclipse.fx.ui.panes;version="3.0.0",
  org.osgi.service.component.annotations;resolution:=optional
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider.xml b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider.xml
new file mode 100644
index 0000000..1d2a0dc
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider">

+   <service>

+      <provide interface="org.eclipse.fx.ui.controls.image.GraphicNodeProvider"/>

+   </service>

+   <implementation class="org.eclipse.fx.ui.controls.image.internal.FXMLNodeProvider"/>

+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider.xml b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider.xml
new file mode 100644
index 0000000..f253dad
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider">

+   <service>

+      <provide interface="org.eclipse.fx.ui.controls.image.GraphicNodeProvider"/>

+   </service>

+   <implementation class="org.eclipse.fx.ui.controls.image.internal.FontGraphicNodeProvider"/>

+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider.xml b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider.xml
new file mode 100644
index 0000000..dc6ffd6
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/OSGI-INF/services/org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider">

+   <service>

+      <provide interface="org.eclipse.fx.ui.controls.image.GraphicNodeProvider"/>

+   </service>

+   <implementation class="org.eclipse.fx.ui.controls.image.internal.ImageClipNodeProvider"/>

+</scr:component>
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/pom.xml b/bundles/runtime/org.eclipse.fx.ui.controls/pom.xml
index 8e802f7..d06be6d 100755
--- a/bundles/runtime/org.eclipse.fx.ui.controls/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/Util.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/Util.java
index 97821a2..c059898 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/Util.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/Util.java
@@ -274,6 +274,7 @@
 	 * @param <E>

 	 *            the source type

 	 * @return the subscription to dispose the binding

+	 * @deprecated use {@link FXObservableUtils#bindContent(List, ObservableList, Function)}

 	 */

 	@SuppressWarnings({ "rawtypes", "unchecked" })

 	public static <T, E> Subscription bindContent(List<T> target, ObservableList<E> sourceList, Function<E, T> converterFunction) {

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/GraphicDecorator.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/GraphicDecorator.java
index cc706c1..08fbb81 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/GraphicDecorator.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/GraphicDecorator.java
@@ -115,18 +115,17 @@
 		}

 

 		private static void updatePseudoState(Label statusIcon, Status status) {

-			statusIcon.pseudoClassStateChanged(error, status.getState() == State.ERROR);

-			statusIcon.pseudoClassStateChanged(warning, status.getState() == State.WARNING);

-			statusIcon.pseudoClassStateChanged(ok, status.getState() == State.OK);

-			statusIcon.pseudoClassStateChanged(cancel, status.getState() == State.CANCEL);

+			statusIcon.pseudoClassStateChanged(error, status != null && status.getState() == State.ERROR);

+			statusIcon.pseudoClassStateChanged(warning, status != null && status.getState() == State.WARNING);

+			statusIcon.pseudoClassStateChanged(ok, status == null || status.getState() == State.OK);

+			statusIcon.pseudoClassStateChanged(cancel, status != null && status.getState() == State.CANCEL);

 			statusIcon.autosize();

 			if( statusIcon.getTooltip() == null ) {

-				if( status.getState() != State.OK ) {

+				if( status != null && status.getState() != State.OK ) {

 					statusIcon.setTooltip(new Tooltip(status.getMessage()));

 				}

-

 			} else {

-				statusIcon.getTooltip().setText(status.getMessage());

+				statusIcon.getTooltip().setText(status == null ? "" : status.getMessage()); //$NON-NLS-1$

 			}

 		}

 

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/NodeDecorator.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/NodeDecorator.java
index 55d5aff..bd2f5db 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/NodeDecorator.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/form/NodeDecorator.java
@@ -1,8 +1,10 @@
 package org.eclipse.fx.ui.controls.form;

 

+import org.eclipse.fx.core.Status;

 import org.eclipse.fx.core.Util;

 import org.eclipse.fx.core.property.ValidationStatusPropertyOwner;

 

+import javafx.beans.value.ObservableValue;

 import javafx.scene.Node;

 

 public interface NodeDecorator {

@@ -23,4 +25,10 @@
 	public static void apply(NodeDecorator decorator, Node control, ValidationStatusPropertyOwner statusOwner) {

 		apply(decorator, control).statusProperty().bind(statusOwner.statusProperty());

 	}

+

+	public static DecoratedNode apply(Node control, ObservableValue<Status> property) {

+		DecoratedNode decoratedNode = apply(control);

+		decoratedNode.statusProperty().bind(property);

+		return decoratedNode;

+	}

 }

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNode.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNode.java
new file mode 100644
index 0000000..689e03f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNode.java
@@ -0,0 +1,159 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image;

+

+import java.util.ArrayList;

+import java.util.Collections;

+import java.util.List;

+

+import org.eclipse.fx.core.Util;

+import org.eclipse.fx.ui.controls.image.ImageCache.CachedImage;

+

+import javafx.beans.property.ObjectProperty;

+import javafx.beans.property.SimpleObjectProperty;

+import javafx.css.CssMetaData;

+import javafx.css.ParsedValue;

+import javafx.css.SimpleStyleableObjectProperty;

+import javafx.css.StyleConverter;

+import javafx.css.Styleable;

+import javafx.css.StyleableProperty;

+import javafx.scene.Node;

+import javafx.scene.image.Image;

+import javafx.scene.image.ImageView;

+import javafx.scene.layout.Region;

+import javafx.scene.layout.StackPane;

+import javafx.scene.text.Font;

+

+/**

+ * A node who can display graphics and delegates to {@link GraphicNodeProvider}

+ * to create the graphic

+ *

+ * @since 3.0

+ */

+public class GraphicNode extends StackPane {

+	static class CustomProtocolConverter extends StyleConverter<Object, String> {

+		@SuppressWarnings({ "unchecked", "rawtypes" })

+		@Override

+		public String convert(ParsedValue<Object, String> value, Font font) {

+			if (value.getValue() instanceof String) {

+				String valueString = value.getValue().toString();

+				return valueString;

+			} else {

+				return StyleConverter.getUrlConverter().convert((ParsedValue<ParsedValue[], String>) (ParsedValue<?, String>) value, font);

+			}

+		}

+	}

+

+	private static CustomProtocolConverter CONVERTER = new CustomProtocolConverter();

+

+	static final CssMetaData<GraphicNode, String> GRAPHIC = new CssMetaData<GraphicNode, String>("-fx-graphic", CONVERTER) { //$NON-NLS-1$

+

+		@Override

+		public boolean isSettable(GraphicNode n) {

+			return n.graphic == null || !n.graphic.isBound();

+		}

+

+		@SuppressWarnings("unchecked")

+		@Override

+		public StyleableProperty<String> getStyleableProperty(GraphicNode n) {

+			return (StyleableProperty<String>) n.graphicProperty();

+		}

+	};

+

+	ObjectProperty<String> graphic;

+	ObjectProperty<Node> graphicNode = new SimpleObjectProperty<>(this, "graphicNode"); //$NON-NLS-1$

+

+	private static List<GraphicNodeProvider> NODE_PROVIDER_LIST = new ArrayList<>();

+

+	static {

+		NODE_PROVIDER_LIST = Util.lookupServiceList(GraphicNode.class, GraphicNodeProvider.class);

+	}

+

+	/**

+	 * Create a new graphic node

+	 */

+	public GraphicNode() {

+		getStyleClass().add("graphic-node"); //$NON-NLS-1$

+

+		if (this.graphicNode.get() != null) {

+			getChildren().setAll(this.graphicNode.get());

+		}

+		this.graphicNode.addListener((o, ol, ne) -> {

+			if (ne == null) {

+				getChildren().clear();

+			} else {

+				getChildren().setAll(ne);

+			}

+		});

+	}

+

+	/**

+	 * @return the graphic url property

+	 */

+	public final ObjectProperty<String> graphicProperty() {

+		if (this.graphic == null) {

+			this.graphic = new SimpleStyleableObjectProperty<String>(GRAPHIC, this, "graphic", null); //$NON-NLS-1$

+			this.graphic.addListener((o, ol, ne) -> {

+				if (ne != null) {

+					CachedImage cachedImage = null;

+					if (this.graphicNode.get() instanceof ImageView) {

+						Image img = ((ImageView) this.graphicNode.get()).getImage();

+						if (img instanceof CachedImage) {

+							cachedImage = (CachedImage) img;

+						}

+					}

+					this.graphicNode.set(NODE_PROVIDER_LIST.stream().filter(np -> np.handles(ne)).findFirst().map(np -> np.getGraphicNode(ne)).orElseGet(() -> new ImageView(ImageCache.getInstance().getImage(ne))));

+

+					if (cachedImage != null) {

+						cachedImage.releaseLazy();

+					}

+				} else {

+					this.graphicNode.set(null);

+				}

+			});

+		}

+		return this.graphic;

+	}

+

+	/**

+	 * @return the graphic url

+	 */

+	public final String getGraphic() {

+		return this.graphicProperty().get();

+	}

+

+	/**

+	 * Set the graphic url

+	 *

+	 * @param graphic

+	 *            the graphic url

+	 */

+	public final void setGraphic(final String graphic) {

+		this.graphicProperty().set(graphic);

+	}

+

+	static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;

+	static {

+		final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());

+		Collections.addAll(styleables, GRAPHIC);

+		STYLEABLES = Collections.unmodifiableList(styleables);

+	}

+

+	public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {

+		return STYLEABLES;

+	}

+

+	@Override

+	public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {

+		return getClassCssMetaData();

+	}

+

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNodeProvider.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNodeProvider.java
new file mode 100644
index 0000000..d75de78
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/GraphicNodeProvider.java
@@ -0,0 +1,47 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image;

+

+import org.eclipse.jdt.annotation.NonNull;

+

+import javafx.scene.Node;

+

+/**

+ * Provider who translates a url into a node

+ *

+ * @since 3.0

+ */

+public interface GraphicNodeProvider {

+	/**

+	 * @return the name

+	 */

+	@NonNull

+	public String getName();

+

+	/**

+	 * Check if the URL is handled

+	 *

+	 * @param url

+	 *            the url

+	 * @return <code>true</code> if the URL is handled

+	 */

+	public boolean handles(String url);

+

+	/**

+	 * Load the graphic node

+	 *

+	 * @param uri

+	 *            the uri

+	 * @return the node

+	 */

+	@NonNull

+	public Node getGraphicNode(String uri);

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageCache.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageCache.java
new file mode 100644
index 0000000..85fc2e8
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageCache.java
@@ -0,0 +1,125 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image;

+

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.Timer;

+import java.util.TimerTask;

+

+import javafx.scene.image.Image;

+

+/**

+ * A cache for images

+ */

+public class ImageCache {

+	private static final ImageCache INSTANCE = new ImageCache();

+

+	Map<String, CachedImage> cache = new HashMap<>();

+	List<CachedImage> lazyCleanup = new ArrayList<>();

+

+	static long MIN_LZAY_TIME = 10_000;

+

+	/**

+	 * A cached image

+	 */

+	public static class CachedImage extends Image {

+		private final ImageCache cache;

+		final String url;

+		int count;

+		long releaseTime;

+

+		CachedImage(ImageCache cache, String url) {

+			super(url);

+			this.url = url;

+			this.cache = cache;

+		}

+

+		/**

+		 * release the image immediately

+		 */

+		public void release() {

+			synchronized (this.cache) {

+				this.count -= 1;

+				if (this.count <= 0) {

+					this.cache.cache.remove(this.url);

+					this.cache.lazyCleanup.remove(this);

+				}

+			}

+		}

+

+		/**

+		 * Schedule the image for release

+		 */

+		public void releaseLazy() {

+			synchronized (this.cache) {

+				this.count -= 1;

+				if (this.count <= 0) {

+					this.releaseTime = System.currentTimeMillis();

+					this.cache.lazyCleanup.add(this);

+				}

+			}

+		}

+	}

+

+	/**

+	 * Create a new cache instance

+	 */

+	public ImageCache() {

+		TimerTask t = new TimerTask() {

+

+			@Override

+			public void run() {

+				long time = System.currentTimeMillis();

+				synchronized (ImageCache.this) {

+					if (!ImageCache.this.lazyCleanup.isEmpty()) {

+						ImageCache.this.lazyCleanup.removeIf(e -> e.count > 0);

+

+						ImageCache.this.lazyCleanup.stream().filter(e -> e.releaseTime + MIN_LZAY_TIME < time).map(e -> e.url).forEach(e -> {

+							ImageCache.this.cache.remove(e);

+						});

+						ImageCache.this.lazyCleanup.removeIf(e -> e.releaseTime + MIN_LZAY_TIME < time);

+					}

+				}

+			}

+		};

+		Timer tt = new Timer(true);

+		tt.scheduleAtFixedRate(t, 0, 5000);

+	}

+

+	/**

+	 * @return get a single instance

+	 */

+	public static ImageCache getInstance() {

+		return INSTANCE;

+	}

+

+	/**

+	 * Get a cached image instance

+	 *

+	 * @param url

+	 *            the url

+	 * @return the image

+	 */

+	public synchronized CachedImage getImage(String url) {

+		CachedImage img = this.cache.get(url);

+

+		if (img == null) {

+			img = new CachedImage(this, url);

+			this.cache.put(url, img);

+		}

+

+		img.count++;

+		return img;

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageClipNode.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageClipNode.java
new file mode 100644
index 0000000..6aabe40
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/ImageClipNode.java
@@ -0,0 +1,95 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image;

+

+import java.util.List;

+

+import org.eclipse.fx.ui.controls.image.ImageCache.CachedImage;

+

+import javafx.beans.value.ObservableValue;

+import javafx.css.CssMetaData;

+import javafx.css.Styleable;

+import javafx.css.StyleableProperty;

+import javafx.css.StyleablePropertyFactory;

+import javafx.scene.image.Image;

+import javafx.scene.image.ImageView;

+import javafx.scene.layout.StackPane;

+

+/**

+ * Node who is clipped by the provided image

+ *

+ * @since 3.0

+ */

+public class ImageClipNode extends StackPane {

+	private static StyleablePropertyFactory<ImageClipNode> FACTORY = new StyleablePropertyFactory<>(StackPane.getClassCssMetaData());

+

+	private final StyleableProperty<String> clipIconUrl = FACTORY.createStyleableUrlProperty(this, "clipIconUrl", "-clip-icon-url", s -> s.clipIconUrl); //$NON-NLS-1$ //$NON-NLS-2$

+

+	/**

+	 * Create a new clip node

+	 */

+	public ImageClipNode() {

+		getStyleClass().add("image-clip-node"); //$NON-NLS-1$

+		ImageView view = new ImageView();

+		clipIconUrlProperty().addListener((o, ol, ne) -> {

+			CachedImage cachedImage = null;

+			Image img = view.getImage();

+			if (img instanceof CachedImage) {

+				cachedImage = (CachedImage) img;

+			}

+

+			if (ne != null) {

+//				ImageView view_ = new ImageView();

+				CachedImage image = ImageCache.getInstance().getImage(ne);

+				view.setImage(image);

+				setPrefSize(image.getWidth(), image.getHeight());

+				setMinSize(image.getWidth(), image.getHeight());

+				setMaxSize(image.getWidth(), image.getHeight());

+//				setClip(view_);

+			}

+

+			if (cachedImage != null) {

+				cachedImage.releaseLazy();

+			}

+		});

+		setClip(view);

+	}

+

+	/**

+	 * @return the url for clip icon property

+	 */

+	@SuppressWarnings("unchecked")

+	public ObservableValue<String> clipIconUrlProperty() {

+		return (ObservableValue<String>) this.clipIconUrl;

+	}

+

+	/**

+	 * @return the clip icon url

+	 */

+	public final String getClipIconUrl() {

+		return this.clipIconUrl.getValue();

+	}

+

+	/**

+	 * Set the clip icon url

+	 *

+	 * @param clipIconUrl

+	 *            the url

+	 */

+	public final void setClipIconUrl(String clipIconUrl) {

+		this.clipIconUrl.setValue(clipIconUrl);

+	}

+

+	@Override

+	public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {

+		return FACTORY.getCssMetaData();

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FXMLNodeProvider.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FXMLNodeProvider.java
new file mode 100644
index 0000000..ed03b32
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FXMLNodeProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image.internal;

+

+import java.io.IOException;

+

+import org.eclipse.fx.core.Util;

+import org.eclipse.fx.ui.controls.image.GraphicNodeProvider;

+import org.eclipse.jdt.annotation.NonNull;

+import org.osgi.service.component.annotations.Component;

+

+import javafx.fxml.FXMLLoader;

+import javafx.scene.Node;

+

+/**

+ * FXML Graphic node provider

+ *

+ * @since 3.0

+ */

+@Component

+public class FXMLNodeProvider implements GraphicNodeProvider {

+

+	@Override

+	public @NonNull String getName() {

+		return "FXML Node Provider"; //$NON-NLS-1$

+	}

+

+	@Override

+	public boolean handles(String url) {

+		return url.endsWith(".fxml"); //$NON-NLS-1$

+	}

+

+	@Override

+	public @NonNull Node getGraphicNode(String uri) {

+		FXMLLoader l = new FXMLLoader();

+		l.setLocation(Util.createUrl(uri));

+		try {

+			return l.load();

+		} catch (IOException e) {

+			throw new RuntimeException(e);

+		}

+	}

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FontGraphicNodeProvider.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FontGraphicNodeProvider.java
new file mode 100644
index 0000000..af6b426
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/FontGraphicNodeProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image.internal;

+

+import org.eclipse.fx.ui.controls.image.FontIconView;

+import org.eclipse.fx.ui.controls.image.GraphicNodeProvider;

+import org.eclipse.jdt.annotation.NonNull;

+import org.osgi.service.component.annotations.Component;

+

+import javafx.scene.Node;

+

+/**

+ * Font graphic

+ */

+@Component

+public class FontGraphicNodeProvider implements GraphicNodeProvider {

+

+	@Override

+	public @NonNull String getName() {

+		return "FontGraphic"; //$NON-NLS-1$

+	}

+

+	@Override

+	public boolean handles(String url) {

+		return url.startsWith("font:"); //$NON-NLS-1$

+	}

+

+	@Override

+	public @NonNull Node getGraphicNode(String uri) {

+		FontIconView v = new FontIconView();

+		v.getStyleClass().add(uri.substring("font:".length())); //$NON-NLS-1$

+		return v;

+	}

+

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/ImageClipNodeProvider.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/ImageClipNodeProvider.java
new file mode 100644
index 0000000..4daff4b
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/image/internal/ImageClipNodeProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.controls.image.internal;

+

+import org.eclipse.fx.ui.controls.image.GraphicNodeProvider;

+import org.eclipse.fx.ui.controls.image.ImageClipNode;

+import org.eclipse.jdt.annotation.NonNull;

+import org.osgi.service.component.annotations.Component;

+

+import javafx.scene.Node;

+

+/**

+ * Image clip node provider

+ *

+ * @since 3.0

+ */

+@Component

+public class ImageClipNodeProvider implements GraphicNodeProvider {

+

+	@Override

+	public @NonNull String getName() {

+		return "Image Clip"; //$NON-NLS-1$

+	}

+

+	@Override

+	public boolean handles(String url) {

+		return url.startsWith("image-clip:"); //$NON-NLS-1$

+	}

+

+	@Override

+	public @NonNull Node getGraphicNode(String uri) {

+		ImageClipNode node = new ImageClipNode();

+		node.getStyleClass().add(uri.substring("image-clip:".length())); //$NON-NLS-1$

+		return node;

+	}

+

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/list/ListComboUtil.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/list/ListComboUtil.java
index bcab9f4..fec18a0 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/list/ListComboUtil.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/list/ListComboUtil.java
@@ -17,12 +17,14 @@
 

 import javafx.beans.binding.StringExpression;

 import javafx.collections.ObservableList;

+import javafx.scene.control.ChoiceBox;

 import javafx.scene.control.ComboBox;

 import javafx.scene.control.ListCell;

 import javafx.scene.control.ListView;

+import javafx.util.StringConverter;

 

 /**

- * Utility to set up a {@link ComboBox} and {@link ListView}

+ * Utility to set up a {@link ComboBox} and {@link ListView} and {@link ChoiceBox}

  *

  * @since 2.3.0

  */

@@ -46,6 +48,25 @@
 	}

 

 	/**

+	 * Setup a choice box

+	 *

+	 * @param choiceBox

+	 *            the choice box

+	 * @param items

+	 *            the items

+	 * @param labelExtractor

+	 *            function to extract the label

+	 * @return the choice box passed in

+	 *

+	 * @since 2.4.0

+	 */

+	public static <T> ChoiceBox<T> setupChoiceBox(ChoiceBox<T> choiceBox, ObservableList<T> items, @NonNull StringConverter<T> labelExtractor) {

+		choiceBox.setConverter(labelExtractor);

+		choiceBox.setItems(items);

+		return choiceBox;

+	}

+

+	/**

 	 * Setup a list

 	 *

 	 * @param listView

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/DefaultTrimmedWindowPane.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/DefaultTrimmedWindowPane.java
index 4212a43..2d46a07 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/DefaultTrimmedWindowPane.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/DefaultTrimmedWindowPane.java
@@ -368,7 +368,7 @@
 			maxButton.setFocusTraversable(false);

 			maxButton.setOnAction(e -> maximize());

 

-			HBox windowBtns = new HBox(3);

+			HBox windowBtns = new HBox();

 			windowBtns.getStyleClass().add("window-buttons"); //$NON-NLS-1$

 			windowBtns.getChildren().addAll(this.minButton, maxButton, closeButton);

 

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/window.css b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/window.css
index c483b19..43a3df9 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/window.css
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/stage/window.css
@@ -74,6 +74,7 @@
 

 .default-window .window-buttons {

     -fx-padding: 6 0 0 0;

+    -fx-spacing: 3;

 }

 

 .default-window .window-button:pressed {

diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/TextGrid.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/TextGrid.java
new file mode 100644
index 0000000..c6732da
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/TextGrid.java
@@ -0,0 +1,272 @@
+package org.eclipse.fx.ui.controls.styledtext;

+

+import java.nio.file.Files;

+import java.nio.file.Paths;

+

+import org.eclipse.fx.ui.controls.styledtext.StyledTextContent.TextChangeListener;

+

+import javafx.application.Application;

+import javafx.beans.Observable;

+import javafx.beans.property.DoubleProperty;

+import javafx.beans.property.SimpleDoubleProperty;

+import javafx.geometry.Orientation;

+import javafx.scene.Scene;

+import javafx.scene.control.ScrollBar;

+import javafx.scene.layout.BorderPane;

+import javafx.scene.layout.StackPane;

+import javafx.scene.text.Font;

+import javafx.scene.text.Text;

+import javafx.stage.Stage;

+

+class TextGrid extends BorderPane {

+	private StyledTextContent content = new DefaultContent();

+

+	public TextGrid() {

+		ContentLayer grid = new ContentLayer(this);

+		setCenter(grid);

+

+		ScrollBar vScroll = new ScrollBar();

+		vScroll.maxProperty().bind(grid.virtualHeight);

+		vScroll.valueProperty().addListener(e -> {

+			grid.setVShift(vScroll.getValue());

+		});

+		vScroll.setOrientation(Orientation.VERTICAL);

+		setRight(vScroll);

+

+		ScrollBar hScroll = new ScrollBar();

+		hScroll.maxProperty().bind(grid.virtualWidth);

+		hScroll.valueProperty().addListener( e -> {

+			grid.setHShift(hScroll.getValue());

+		});

+		setBottom(hScroll);

+	}

+

+	public void setText(String text) {

+		content.setText(text);

+	}

+

+	private static class ContentLayer extends StackPane {

+		private Text[][] textGrid = new Text[0][0] ;

+		private Text calcNode;

+		private int columnOffset;

+		private int rowOffset;

+

+		private DoubleProperty virtualHeight = new SimpleDoubleProperty(100);

+		private DoubleProperty virtualWidth = new SimpleDoubleProperty(100);

+		private int longestLine;

+		private double totalHeight;

+		private final TextGrid container;

+

+		Font font = Font.font("Monospace", 13);

+

+		public ContentLayer(TextGrid container) {

+			this.container = container;

+			this.calcNode = new Text("m");

+			this.calcNode.setFont(font);

+			this.calcNode.setManaged(false);

+			getChildren().add(this.calcNode);

+			widthProperty().addListener(this::handleWidthChange);

+			heightProperty().addListener(this::handleHeightChange);

+			container.content.addTextChangeListener( new TextChangeListener() {

+

+				@Override

+				public void textChanged(TextChangedEvent event) {

+					update();

+				}

+

+				@Override

+				public void textSet(TextChangedEvent event) {

+					update();

+				}

+

+				@Override

+				public void textChanging(TextChangingEvent event) {

+					update();

+				}

+

+				private void update() {

+					totalHeight = 0;

+					longestLine = 0;

+					for( int i = 0; i < container.content.getLineCount(); i++ ) {

+						totalHeight += getTextHeight();

+						longestLine = Math.max(longestLine, container.content.getLine(i).length());

+					}

+

+					if(  textGrid.length > 0 ) {

+						virtualWidth.set(longestLine * getTextWidth() - textGrid[0].length * getTextWidth() );

+					}

+					virtualHeight.set(totalHeight - (textGrid.length - 2) * getTextHeight());

+				}

+			});

+		}

+

+		private Text[] allocate(int amount) {

+			Text[] rv = new Text[amount];

+			for( int i = 0; i < amount; i++ ) {

+				rv[i] = new Text();

+				rv[i].setFont(font);

+				rv[i].setManaged(false);

+			}

+			getChildren().addAll(rv);

+			return rv;

+		}

+

+		private void deallocate(Text... texts) {

+			getChildren().removeAll(texts);

+		}

+

+		private int getTextWidth() {

+			return (int) Math.ceil(this.calcNode.getLayoutBounds().getWidth());

+		}

+

+		private int getTextHeight() {

+			return (int) Math.ceil(this.calcNode.getLayoutBounds().getHeight());

+		}

+

+		private void handleWidthChange(Observable o, Number ol, Number ne) {

+			this.calcNode.autosize();

+			double s = getTextWidth();

+

+			int textCount = (int)Math.ceil(getWidth() / s) + 2;

+

+			if( this.textGrid.length == 0) {

+				this.textGrid = new Text[1][0];

+				this.textGrid[0] =  allocate(textCount);

+			} else {

+				int length = this.textGrid[0].length;

+				if(length < textCount ) {

+					int delta = textCount - length;

+					for( int i = 0; i < this.textGrid.length; i++ ) {

+						Text[] newLine = new Text[textCount];

+						System.arraycopy(this.textGrid[i], 0, newLine, 0, this.textGrid[i].length);

+						System.arraycopy(allocate(delta),0,newLine,length,delta);

+						this.textGrid[i] = newLine;

+					}

+				} else if( length > textCount ) {

+					int delta = length - textCount;

+					for( int i = 0; i < this.textGrid.length; i++ ) {

+						Text[] newLine = new Text[textCount];

+						System.arraycopy(this.textGrid[i], 0, newLine, 0, textCount);

+						Text[] cleanup = new Text[delta];

+						for( int j = 0; j < delta; j++ ) {

+							cleanup[j] = this.textGrid[i][textCount+j];

+						}

+						deallocate(cleanup);

+						this.textGrid[i] = newLine;

+					}

+				}

+			}

+

+			fixContent();

+

+			virtualWidth.set(longestLine * getTextWidth() - textGrid[0].length * getTextWidth() );

+		}

+

+		private void handleHeightChange(Observable o, Number ol, Number ne) {

+			this.calcNode.autosize();

+			double s = Math.ceil(this.calcNode.getLayoutBounds().getHeight());

+

+			int textCount = (int)Math.ceil(getHeight() / s) + 2;

+

+			if( this.textGrid.length == 0) {

+				this.textGrid = new Text[textCount][0];

+			} else if(this.textGrid.length < textCount ) {

+				int delta = textCount - this.textGrid.length;

+				Text[][] newGrid = new Text[textCount][this.textGrid[0].length];

+				for( int i = 0; i < this.textGrid.length; i++ ) {

+					System.arraycopy(this.textGrid[i], 0, newGrid[i], 0, this.textGrid[i].length);

+				}

+

+				for( int i = 0; i < delta; i++ ) {

+					newGrid[this.textGrid.length+i] = allocate(this.textGrid[0].length);

+				}

+				this.textGrid = newGrid;

+			} else if( this.textGrid.length > textCount ) {

+				int delta = this.textGrid.length - textCount;

+				Text[][] newGrid = new Text[textCount][this.textGrid[0].length];

+				for( int i = 0; i < textCount; i++ ) {

+					System.arraycopy(this.textGrid[i], 0, newGrid[i], 0, this.textGrid[0].length);

+				}

+				for( int i = 0; i < delta; i++ ) {

+					deallocate(this.textGrid[textCount+i]);

+				}

+				this.textGrid = newGrid;

+			}

+

+			fixContent();

+			virtualHeight.set(totalHeight - (textGrid.length - 2) * getTextHeight());

+		}

+

+		private void fixContent() {

+			for( int r = 0; r < this.textGrid.length; r++ ) {

+				int row = r + this.rowOffset;

+				for( int c = 0; c < this.textGrid[r].length; c++ ) {

+					if( row < container.content.getLineCount() ) {

+						String l = container.content.getLine(row);

+						int col = c + this.columnOffset;

+						if( col < l.length() ) {

+							this.textGrid[r][c].setText(String.valueOf(l.charAt(col)));

+						} else {

+							this.textGrid[r][c].setText(""); //$NON-NLS-1$

+						}

+					} else {

+						this.textGrid[r][c].setText(""); //$NON-NLS-1$

+					}

+				}

+			}

+		}

+

+		@Override

+		protected void layoutChildren() {

+			super.layoutChildren();

+			int y = 0;

+			for( int r = 0; r < this.textGrid.length; r++ ) {

+				int x = 0;

+				for( int c = 0; c < this.textGrid[r].length; c++ ) {

+					this.textGrid[r][c].relocate(x, y);

+					x += getTextWidth();

+				}

+				y += Math.ceil(this.calcNode.getLayoutBounds().getHeight());

+			}

+		}

+

+		public void setHShift(double value) {

+			int width = (int)getTextWidth();

+			double v = value % width;

+			setTranslateX(v*-1);

+			int columnOffset = (int)(value / width);

+			if( columnOffset != this.columnOffset ) {

+				this.columnOffset = columnOffset;

+				fixContent();

+			}

+		}

+

+		public void setVShift(double value) {

+			int height = (int) Math.ceil(this.calcNode.getLayoutBounds().getHeight());

+			double v = value % height;

+			setTranslateY(v*-1);

+			int rowOffset = (int)(value / height);

+			if( rowOffset != this.rowOffset ) {

+				this.rowOffset = rowOffset;

+				fixContent();

+			}

+		}

+	}

+

+

+	public static void main(String[] args) {

+		Application.launch(MyApplication.class, args);

+	}

+

+	public static class MyApplication extends Application {

+

+		@Override

+		public void start(Stage primaryStage) throws Exception {

+			TextGrid grid = new TextGrid();

+			grid.setText(new String( Files.readAllBytes(Paths.get("/Users/tomschindl/dart-samples/Grid.java")) ));

+			primaryStage.setScene(new Scene(grid, 500, 500));

+			primaryStage.show();

+		}

+

+	}

+}
\ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java
index d7a9ce9..6c95555 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java
@@ -348,6 +348,10 @@
 	}
 
 	private void onTextPositionDragDetected(TextPositionEvent event) {
+		if( event.getButton() != MouseButton.PRIMARY ) {
+			return;
+		}
+
 		if (this.pressedInSelection) {
 			if( org.eclipse.fx.ui.controls.Util.isCopyEvent(event) ) {
 				getControl().pseudoClassStateChanged(DRAG_TEXT_COPY_ACTIVE_PSEUDOCLASS_STATE, true);
@@ -432,35 +436,36 @@
 			// read text
 			@NonNull
 			String text = getControl().getContent().getTextRange(this.dragMoveTextOffset, this.dragMoveTextLength);
+			if( getControl().getEditable() ) {
 
-			// notify the undo implementation that a compund change occurs
-			getControl().fireEvent(UndoHintEvent.createBeginCompoundChangeEvent());
-			try {
-				if( ! org.eclipse.fx.ui.controls.Util.isCopyEvent(event) ) {
-					// replace
-					if (isInRange(targetOffset, this.dragMoveTextOffset, this.dragMoveTextLength)) {
-						targetOffset = this.dragMoveTextOffset;
-					}
-					// after
-					else if (targetOffset >= this.dragMoveTextOffset + this.dragMoveTextLength) {
-						targetOffset -= this.dragMoveTextLength;
+				// notify the undo implementation that a compund change occurs
+				getControl().fireEvent(UndoHintEvent.createBeginCompoundChangeEvent());
+				try {
+					if( ! org.eclipse.fx.ui.controls.Util.isCopyEvent(event) ) {
+						// replace
+						if (isInRange(targetOffset, this.dragMoveTextOffset, this.dragMoveTextLength)) {
+							targetOffset = this.dragMoveTextOffset;
+						}
+						// after
+						else if (targetOffset >= this.dragMoveTextOffset + this.dragMoveTextLength) {
+							targetOffset -= this.dragMoveTextLength;
+						}
+
+						// remove
+						getControl().getContent().replaceTextRange(this.dragMoveTextOffset, this.dragMoveTextLength, ""); //$NON-NLS-1$
 					}
 
-					// remove
-					getControl().getContent().replaceTextRange(this.dragMoveTextOffset, this.dragMoveTextLength, ""); //$NON-NLS-1$
+					// insert
+					getControl().getContent().replaceTextRange(targetOffset, 0, text);
+
+					// move caret to end of insertion and select the text
+					moveCaretAbsolute(targetOffset + text.length());
+					getControl().setSelection(new TextSelection(targetOffset, text.length()));
 				}
-
-				// insert
-				getControl().getContent().replaceTextRange(targetOffset, 0, text);
-
-				// move caret to end of insertion and select the text
-				moveCaretAbsolute(targetOffset + text.length());
-				getControl().setSelection(new TextSelection(targetOffset, text.length()));
+				finally {
+					getControl().fireEvent(UndoHintEvent.createEndCompoundChangeEvent());
+				}
 			}
-			finally {
-				getControl().fireEvent(UndoHintEvent.createEndCompoundChangeEvent());
-			}
-
 
 			this.dragMoveTextMode = false;
 			event.consume();
@@ -600,6 +605,10 @@
 	}
 
 	protected boolean defaultHandle(TextEditAction action, Context context) {
+		if( ! getControl().getEditable() && action.isModification() ) {
+			return true;
+		}
+
 		if (action == DefaultTextEditActions.TEXT_START) {
 			defaultNavigateTextStart();
 			return true;
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java
index 1888d1d..29f2adb 100644
--- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java
+++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java
@@ -139,7 +139,7 @@
 		styledText.caretOffsetProperty().addListener((obs, ol, ne) -> {
 			int lineIdx = styledText.getContent().getLineAtOffset(ne.intValue());
 			int colIdx = ne.intValue() - styledText.getContent().getOffsetAtLine(lineIdx);
-			
+
 			// fix colIdx with tabs
 			String line = styledText.getContent().getLine(lineIdx).substring(0, colIdx);
 			int tabCount = (int)line.chars().filter(c -> c == '\t').count();
@@ -175,7 +175,7 @@
 
 		this.content.styleProperty().bind(zoomedFontStyle);
 		this.lineRulerArea.styleProperty().bind(zoomedFontStyle);
-		
+
 		getSkinnable().fontZoomFactorProperty().addListener((x, o, n)->{
 			this.sortedLineRulerFlows.forEach(LineRuler::requestLayout);
 		});
@@ -210,7 +210,9 @@
 
 		this.content.getStyleClass().addAll(CSS_LIST_VIEW);
 		this.content.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, e -> {
-			getSkinnable().getContextMenu().show(this.content, e.getScreenX(), e.getScreenY());
+			if( getSkinnable().getContextMenu() != null ) {
+				getSkinnable().getContextMenu().show(this.content, e.getScreenX(), e.getScreenY());
+			}
 		});
 
 		// focus delegation
@@ -321,11 +323,11 @@
 			BiConsumer<Node, Set<Annotation>> populator = ap::updateNode;
 
 			LineRuler flow = new LineRuler(ap.getLayoutHint(), converter, needsPresentation, nodeFactory, populator);
-			
+
 			flow.getStyleClass().setAll(CSS_CLASS_LINE_RULER);
 			// add the styleclass from the provider
 			ap.getStyleClass().ifPresent(flow.getStyleClass()::add);
-			
+
 			// VerticalLineFlow<Integer, Annotation> flow = new
 			// VerticalLineFlow<Integer, Annotation>(converter,
 			// needsPresentation, nodeFactory, populator);
@@ -437,7 +439,7 @@
 			updateInsertionMarkerIndex(-1);
 			e.consume();
 		});
-		
+
 		this.content.setOnDragOver(e -> {
 			Point2D coords = new Point2D(e.getX(), e.getY());
 			Optional<Integer> lineIndex = this.content.getLineIndex(coords);
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.databinding/META-INF/MANIFEST.MF
index 0971025..57a0892 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/META-INF/MANIFEST.MF
@@ -2,13 +2,16 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Databinding
 Bundle-SymbolicName: org.eclipse.fx.ui.databinding
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.databinding.observable;bundle-version="1.4.1",
  org.eclipse.core.databinding.property,
  org.eclipse.core.databinding,
- org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.ui.databinding;version="2.6.0",
- org.eclipse.fx.ui.databinding.converters;version="2.6.0"
+ org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
+ org.eclipse.equinox.common;bundle-version="3.7.0"
+Export-Package: org.eclipse.fx.ui.databinding;version="3.0.0",
+ org.eclipse.fx.ui.databinding.converters;version="3.0.0"
 Bundle-Vendor: Eclipse.org
-Import-Package: org.eclipse.fx.core.databinding;version="2.6.0"
+Import-Package: org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.databinding;version="3.0.0",
+ org.eclipse.fx.ui.controls.form;version="3.0.0"
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/pom.xml b/bundles/runtime/org.eclipse.fx.ui.databinding/pom.xml
index 0480e6d..2c4492e 100755
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/BindingSupport.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/BindingSupport.java
new file mode 100644
index 0000000..bf81af8
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/BindingSupport.java
@@ -0,0 +1,97 @@
+///*******************************************************************************
+// * Copyright (c) 2016 BestSolution.at and others.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
+// *******************************************************************************/
+//package org.eclipse.fx.ui.databinding;
+//
+//import org.eclipse.core.databinding.Binding;
+//import org.eclipse.core.databinding.DataBindingContext;
+//import org.eclipse.core.databinding.observable.value.IObservableValue;
+//import org.eclipse.core.databinding.observable.value.WritableValue;
+//import org.eclipse.core.runtime.IStatus;
+//import org.eclipse.fx.core.Status;
+//import org.eclipse.fx.core.Status.State;
+//import org.eclipse.fx.ui.controls.form.DecoratedNode;
+//import org.eclipse.fx.ui.controls.form.NodeDecorator;
+//
+//import javafx.scene.Node;
+//
+///**
+// * Support utility to remove boilderplate code when binding values
+// */
+//@SuppressWarnings("restriction")
+//public class BindingSupport<T> {
+//	public static Binding decorate(Node node, Binding binding) {
+//		DecoratedNode decoratedNode = NodeDecorator.apply(node);
+//		binding.getValidationStatus().addValueChangeListener( d -> {
+//			IStatus s = (IStatus) d.diff.getNewValue();
+//			if( s.isOK() ) {
+//				decoratedNode.setStatus(Status.ok());
+//			} else {
+//				State st = State.OK;
+//				switch (s.getSeverity()) {
+//				case IStatus.CANCEL:
+//					st = State.CANCEL;
+//					break;
+//				case IStatus.ERROR:
+//					st = State.ERROR;
+//					break;
+//				case IStatus.WARNING:
+//					st = State.WARNING;
+//					break;
+//				case IStatus.INFO:
+//				case IStatus.OK:
+//					st = State.OK;
+//					break;
+//				default:
+//					break;
+//				}
+//				decoratedNode.setStatus(
+//						Status.status(st, s.getCode(), s.getMessage(), s.getException()));
+//			}
+//		});
+//		return binding;
+//	}
+//
+////	private final DataBindingContext context;
+////	private final IObservableValue master;
+////
+////	public BindingSupport(DataBindingContext context, Class<T> masterType) {
+////		this.context = context;
+////		this.master = new WritableValue(null, masterType);
+////	}
+////
+////	public BindingSupport(DataBindingContext context, IObservableValue masterValue) {
+////		this.context = context;
+////		this.master = masterValue;
+////	}
+//
+////	public BindingBuilder create(Node node) {
+////		return new BindingBuilder(this.context, node);
+////	}
+////
+////	public static class BindingBuilder {
+////		private final Node node;
+////		private final DataBindingContext context;
+////
+////		public BindingBuilder(DataBindingContext context, Node node) {
+////			this.context = context;
+////			this.node = node;
+////		}
+////
+////		public BindingBuilder model(IObservableValue master) {
+////
+////		}
+////
+////		public Binding build() {
+////
+////		}
+////	}
+//
+//}
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueObservable.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueObservable.java
index 16eb427..fa558fb 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueObservable.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueObservable.java
@@ -14,7 +14,10 @@
 
 /**
  * Base interface of all control observables
+ *
+ * @param <T>
+ *            type of the value of the property
  */
-public interface IJFXControlValueObservable extends IObservableValue {
+public interface IJFXControlValueObservable<T> extends IObservableValue<T> {
 	// nothing to spec
 }
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueProperty.java
index 5812e65..d82ad2a 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/IJFXControlValueProperty.java
@@ -10,26 +10,19 @@
  *******************************************************************************/
 package org.eclipse.fx.ui.databinding;
 
-import javafx.scene.Node;
-import javafx.scene.control.Control;
-
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.jdt.annotation.NonNull;
 
 /**
  * Base interface of control properties
+ *
+ * @param <S>
+ *            type of the source object
+ * @param <T>
+ *            type of the value of the property
  */
-public interface IJFXControlValueProperty extends IValueProperty {
-	/**
-	 * Create an observable on the default realm
-	 *
-	 * @param control
-	 *            the control
-	 * @return the observable
-	 */
-	@NonNull
-	public IJFXControlValueObservable observe(@NonNull Control control);
+public interface IJFXControlValueProperty<S, T> extends IValueProperty<S, T> {
 
 	/**
 	 * Create an observable on the default realm
@@ -39,19 +32,9 @@
 	 * @return the observable
 	 * @since 2.4.0
 	 */
+	@Override
 	@NonNull
-	public IJFXControlValueObservable observe(@NonNull Node control);
-
-	/**
-	 * Create an observable on the given realm
-	 *
-	 * @param realm
-	 *            the realm
-	 * @param control
-	 *            the control
-	 * @return the observable
-	 */
-	public IJFXControlValueObservable observe(@NonNull Realm realm, @NonNull Control control);
+	public IJFXControlValueObservable<T> observe(S control);
 
 	/**
 	 * Create an observable on the given realm
@@ -63,19 +46,8 @@
 	 * @return the observable
 	 * @since 2.4.0
 	 */
-	public IJFXControlValueObservable observe(@NonNull Realm realm, @NonNull Node control);
-
-	/**
-	 * Create an observable who waits for the given delay until informing about
-	 * the change
-	 *
-	 * @param delay
-	 *            the delay
-	 * @param control
-	 *            the control
-	 * @return the observable
-	 */
-	public IJFXControlValueObservable observeDelayed(int delay, @NonNull Control control);
+	@Override
+	public IJFXControlValueObservable<T> observe(Realm realm, S control);
 
 	/**
 	 * Create an observable who waits for the given delay until informing about
@@ -88,5 +60,5 @@
 	 * @return the observable
 	 * @since 2.4.0
 	 */
-	public IJFXControlValueObservable observeDelayed(int delay, @NonNull Node control);
+	public IJFXControlValueObservable<T> observeDelayed(int delay, S control);
 }
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/JFXUIProperties.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/JFXUIProperties.java
index 4317a05..ca86f4d 100755
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/JFXUIProperties.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/JFXUIProperties.java
@@ -10,20 +10,23 @@
  *******************************************************************************/

 package org.eclipse.fx.ui.databinding;

 

-import javafx.scene.control.ComboBox;

-import javafx.scene.control.DatePicker;

-import javafx.scene.control.ListView;

-import javafx.scene.control.TableView;

-import javafx.scene.control.TreeTableView;

-import javafx.scene.control.TreeView;

+import java.time.LocalDate;

 

-import org.eclipse.fx.core.databinding.IJFXBeanValueProperty;

-import org.eclipse.fx.core.databinding.JFXBeanProperties;

-import org.eclipse.fx.ui.databinding.internal.DatePickerValueProperty;

+import org.eclipse.fx.ui.databinding.internal.DateValueProperty;

 import org.eclipse.fx.ui.databinding.internal.SingleSelectionProperty;

 import org.eclipse.fx.ui.databinding.internal.TextValueProperty;

 import org.eclipse.jdt.annotation.NonNull;

 

+import javafx.scene.control.Cell;

+import javafx.scene.control.ComboBox;

+import javafx.scene.control.DatePicker;

+import javafx.scene.control.ListView;

+import javafx.scene.control.Tab;

+import javafx.scene.control.TableView;

+import javafx.scene.control.TextInputControl;

+import javafx.scene.control.TreeTableView;

+import javafx.scene.control.TreeView;

+

 /**

  * Factory to create JavaFX properties

  */

@@ -41,20 +44,44 @@
 	 * @return the property

 	 */

 	@NonNull

-	public static IJFXControlValueProperty singleViewSelection() {

-		return new SingleSelectionProperty();

+	public static <@NonNull S,T> IJFXControlValueProperty<S,T> singleViewSelection() {

+		return new SingleSelectionProperty<>();

 	}

 

 	/**

-	 * Create a property for the text-property of a javafx bean

-	 *

-	 * @return the text property

-	 * @deprecated use {@link #text2()}

+	 * @return single selection property for {@link ListView}

+	 * @since 3.0.0

 	 */

 	@NonNull

-	@Deprecated

-	public static IJFXBeanValueProperty text() {

-		return JFXBeanProperties.value("text"); //$NON-NLS-1$

+	public static <T> IJFXControlValueProperty<ListView<T>,T> singleListViewSelection() {

+		return new SingleSelectionProperty<>();

+	}

+

+	/**

+	 * @return single selection property for {@link ComboBox}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static <T> IJFXControlValueProperty<ComboBox<T>,T> singleComboBoxSelection() {

+		return new SingleSelectionProperty<>();

+	}

+

+	/**

+	 * @return single selection property for {@link TreeView}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static <T> IJFXControlValueProperty<TreeTableView<T>,T> singleTreeTableViewSelection() {

+		return new SingleSelectionProperty<>();

+	}

+

+	/**

+	 * @return single selection property for {@link TreeView}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static <T> IJFXControlValueProperty<TreeView<T>,T> singleTreeViewSelection() {

+		return new SingleSelectionProperty<>();

 	}

 

 	/**

@@ -64,8 +91,53 @@
 	 * @since 2.4.0

 	 */

 	@NonNull

-	public static IJFXControlValueProperty text2() {

-		return new TextValueProperty();

+	public static <@NonNull S> IJFXControlValueProperty<S,String> text() {

+		return new TextValueProperty<>();

+	}

+

+	/**

+	 * @return text property for an {@link Object} who has a property named "text"

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<Object,String> anyText() {

+		return new TextValueProperty<>();

+	}

+

+	/**

+	 * @return text property for a {@link TextInputControl}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<TextInputControl,String> textInputText() {

+		return new TextValueProperty<>();

+	}

+

+	/**

+	 * @return text property of a {@link ComboBox#editorProperty()}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<ComboBox<?>,String> comboBoxText() {

+		return new TextValueProperty<>();

+	}

+

+	/**

+	 * @return text property of a {@link Cell}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<Cell<?>,String> cellText() {

+		return new TextValueProperty<>();

+	}

+

+	/**

+	 * @return text property of a {@link Tab}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<Tab,String> tabText() {

+		return new TextValueProperty<>();

 	}

 

 	/**

@@ -74,7 +146,16 @@
 	 * @return the property

 	 */

 	@NonNull

-	public static IJFXControlValueProperty date() {

-		return new DatePickerValueProperty();

+	public static <@NonNull S> IJFXControlValueProperty<S,LocalDate> date() {

+		return new DateValueProperty<>();

+	}

+

+	/**

+	 * @return date property of a {@link DatePicker}

+	 * @since 3.0.0

+	 */

+	@NonNull

+	public static IJFXControlValueProperty<DatePicker,LocalDate> datePickerDate() {

+		return new DateValueProperty<>();

 	}

 }

diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/ListUtil.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/ListUtil.java
index 60668c8..268c454 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/ListUtil.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/ListUtil.java
@@ -118,7 +118,7 @@
 	 *            the list element type
 	 * @see #setupList(ListView, String, IValueProperty...)
 	 */
-	public static <T> void setupList(@NonNull ListView<T> listView, @NonNull IObservableList list,
+	public static <T> void setupList(@NonNull ListView<T> listView, @NonNull IObservableList<T> list,
 			@NonNull String template, @NonNull IValueProperty... properties) {
 		setupList(listView, template, properties);
 		listView.setItems(AdapterFactory.<T> adapt(list));
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/TreeUtil.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/TreeUtil.java
index f1f4ccb..a6c29c0 100755
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/TreeUtil.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/TreeUtil.java
@@ -20,7 +20,6 @@
 import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
 import org.eclipse.jdt.annotation.NonNull;
 
-import javafx.beans.value.ChangeListener;
 import javafx.collections.ObservableList;
 import javafx.scene.control.TreeItem;
 
@@ -30,7 +29,7 @@
 public class TreeUtil {
 	/**
 	 * Create a tree model backed by the given {@link ObservableFactory}
-	 * 
+	 *
 	 * @param root
 	 *            the root of the model
 	 * @param factory
@@ -46,14 +45,14 @@
 
 	/**
 	 * Factory to create child observables
-	 * 
+	 *
 	 * @param <T>
 	 *            the type
 	 */
 	public interface ObservableFactory<T> {
 		/**
 		 * Create an observable list for the parent element
-		 * 
+		 *
 		 * @param parent
 		 *            the parent
 		 * @return the list
@@ -71,17 +70,19 @@
 			setValue(element);
 			this.factory = factory;
 			this.list = factory.createObservable(element);
-			getChildren().add(new TreeItem<>());
-			
-			expandedProperty().addListener((o) -> {
-				if( isExpanded() ) {
-					if( ! this.hasLoadedChildren ) {
-						loadChildren();
+			if( this.list != null ) {
+				getChildren().add(new TreeItem<>());
+
+				expandedProperty().addListener((o) -> {
+					if( isExpanded() ) {
+						if( ! this.hasLoadedChildren ) {
+							loadChildren();
+						}
 					}
-				}
-			});
+				});
+			}
 		}
-		
+
 //		@Override
 //		public ObservableList<TreeItem<T>> getChildren() {
 //			if (this.hasLoadedChildren == false) {
@@ -89,7 +90,7 @@
 //			}
 //			return super.getChildren();
 //		}
-		
+
 //		@Override
 //		public boolean isLeaf() {
 //			if( this.hasLoadedChildren ) {
@@ -118,20 +119,7 @@
 
 							@Override
 							public void handleRemove(int index, Object element) {
-								if (itemList.size() < index) {
-									TreeItem<T> t = itemList.get(index);
-									if (t.getValue() == element) {
-										itemList.remove(index);
-									} else {
-										Iterator<TreeItem<T>> it = itemList.iterator();
-										while (it.hasNext()) {
-											if (it.next().getValue() == element) {
-												it.remove();
-												break;
-											}
-										}
-									}
-								}
+								itemList.remove(index);
 							}
 
 							@SuppressWarnings({ "unchecked" })
@@ -143,18 +131,26 @@
 									itemList.add(new TreeItemImpl<@NonNull T>((T) element, TreeItemImpl.this.factory));
 								}
 							}
+
+							@Override
+							public void handleMove(int oldIndex, int newIndex, Object element) {
+								TreeItem<T> item = getChildren().remove(oldIndex);
+								getChildren().add(newIndex,item);
+							}
 						});
 					}
 				});
 				List<TreeItemImpl<@NonNull T>> l = new ArrayList<>(this.list.size());
-				
+
 				for (Object o : this.list) {
 					@SuppressWarnings("unchecked")
 					T t = (T) o;
 					l.add(new TreeItemImpl<@NonNull T>(t, this.factory));
 				}
-				
+
 				itemList.setAll(l);
+			} else {
+				getChildren().clear();
 			}
 		}
 
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlDelayedObservableValueDecorator.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlDelayedObservableValueDecorator.java
index 8e0ef2f..3ec84e9 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlDelayedObservableValueDecorator.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlDelayedObservableValueDecorator.java
@@ -5,10 +5,11 @@
 import javafx.beans.Observable;
 import javafx.scene.Node;
 
-public class ControlDelayedObservableValueDecorator extends ControlObservableValueDecorator {
+@SuppressWarnings("javadoc")
+public class ControlDelayedObservableValueDecorator<T> extends ControlObservableValueDecorator<T> {
 	private final Node control;
 
-	public ControlDelayedObservableValueDecorator(IObservableValue decorated, Node control) {
+	public ControlDelayedObservableValueDecorator(IObservableValue<T> decorated, Node control) {
 		super(decorated);
 		this.control = control;
 		control.focusedProperty().addListener( this::handleFocusChange );
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlObservableValueDecorator.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlObservableValueDecorator.java
index 7926e99..8a45713 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlObservableValueDecorator.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlObservableValueDecorator.java
@@ -14,15 +14,13 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.fx.ui.databinding.IJFXControlValueObservable;
 
-/**
- * 
- */
-public class ControlObservableValueDecorator extends DecoratingObservableValue implements IJFXControlValueObservable {
+@SuppressWarnings("javadoc")
+public class ControlObservableValueDecorator<T> extends DecoratingObservableValue<T> implements IJFXControlValueObservable<T> {
 
 	/**
 	 * @param decorated
 	 */
-	public ControlObservableValueDecorator(IObservableValue decorated) {
+	public ControlObservableValueDecorator(IObservableValue<T> decorated) {
 		super(decorated, true);
 	}
 
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlPropertyValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlPropertyValueProperty.java
index e6a04c5..b20d954 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlPropertyValueProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlPropertyValueProperty.java
@@ -12,18 +12,15 @@
 
 import javafx.beans.property.Property;
 
-/**
- * @param <O>
- */
-public abstract class ControlPropertyValueProperty<O> extends ControlReadOnlyPropertyValueProperty<O> {
+@SuppressWarnings("javadoc")
+public abstract class ControlPropertyValueProperty<S,T> extends ControlReadOnlyPropertyValueProperty<S,T> {
 	@Override
-	protected abstract Property<O> getProperty(Object source);
-	
-	@SuppressWarnings("unchecked")
+	protected abstract Property<T> getProperty(S source);
+
 	@Override
-	protected void doSetValue(Object source, Object value) {
-		Property<O> p = getProperty(source);
-		p.setValue((O) value);
+	protected void doSetValue(S source, T value) {
+		Property<T> p = getProperty(source);
+		p.setValue((T) value);
 	}
-	
+
 }
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlReadOnlyPropertyValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlReadOnlyPropertyValueProperty.java
index a44e493..e5cd080 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlReadOnlyPropertyValueProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlReadOnlyPropertyValueProperty.java
@@ -10,65 +10,66 @@
  *******************************************************************************/
 package org.eclipse.fx.ui.databinding.internal;
 
-import javafx.beans.property.ReadOnlyProperty;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-
 import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.value.ValueDiff;
 import org.eclipse.core.databinding.property.INativePropertyListener;
 import org.eclipse.core.databinding.property.IProperty;
 import org.eclipse.core.databinding.property.ISimplePropertyListener;
 import org.eclipse.core.databinding.property.NativePropertyListener;
 import org.eclipse.jdt.annotation.NonNull;
 
-/**
- * @param <O>
- */
-public abstract class ControlReadOnlyPropertyValueProperty<O> extends ControlValueProperty {
+import javafx.beans.property.ReadOnlyProperty;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+
+@SuppressWarnings("javadoc")
+public abstract class ControlReadOnlyPropertyValueProperty<S,T> extends ControlValueProperty<S,T> {
 
 	@Override
-	protected Object doGetValue(Object source) {
-		ReadOnlyProperty<O> p = getProperty(source);
+	protected T doGetValue(S source) {
+		ReadOnlyProperty<T> p = getProperty(source);
 		return p.getValue();
 	}
 
 	/**
 	 * Get the property
-	 * 
+	 *
 	 * @param source
 	 *            the source
 	 * @return the property
 	 */
-	protected abstract @NonNull ReadOnlyProperty<O> getProperty(Object source);
+	protected abstract @NonNull ReadOnlyProperty<T> getProperty(S source);
 
 	@Override
-	public INativePropertyListener adaptListener(ISimplePropertyListener listener) {
+	public INativePropertyListener<S> adaptListener(ISimplePropertyListener<S, ValueDiff<? extends T>> listener) {
 		return new ListenerImpl(this, listener);
 	}
 
-	class ListenerImpl extends NativePropertyListener implements ChangeListener<Object> {
-		private Object owner;
+	class ListenerImpl extends NativePropertyListener<S, ValueDiff<? extends T>> implements ChangeListener<T> {
+		private S owner;
 
-		public ListenerImpl(IProperty property, ISimplePropertyListener listener) {
+		@SuppressWarnings("null")
+		public ListenerImpl(IProperty property, ISimplePropertyListener<S, ValueDiff<? extends T>> listener) {
 			super(property, listener);
 		}
 
 		@Override
-		public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) {
+		public void changed(ObservableValue<? extends T> observable, T oldValue, T newValue) {
 			fireChange(this.owner, Diffs.createValueDiff(oldValue, newValue));
 		}
 
 		@Override
-		protected void doAddTo(Object source) {
+		protected void doAddTo(S source) {
 			this.owner = source;
-			ReadOnlyProperty<O> p = getProperty(source);
+			ReadOnlyProperty<T> p = getProperty(source);
 			p.addListener(this);
 		}
 
+		@SuppressWarnings("null")
 		@Override
-		protected void doRemoveFrom(Object source) {
+		protected void doRemoveFrom(S source) {
 			this.owner = null;
-			ReadOnlyProperty<O> p = getProperty(source);
+			ReadOnlyProperty<T> p = getProperty(source);
 			p.removeListener(this);
 		}
 	}
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlValueProperty.java
index 10b817d..c5e54a1 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlValueProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/ControlValueProperty.java
@@ -10,9 +10,6 @@
  *******************************************************************************/
 package org.eclipse.fx.ui.databinding.internal;
 
-import javafx.scene.Node;
-import javafx.scene.control.Control;
-
 import org.eclipse.core.databinding.observable.Observables;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -21,67 +18,32 @@
 import org.eclipse.fx.ui.databinding.IJFXControlValueProperty;
 import org.eclipse.jdt.annotation.NonNull;
 
-/**
- *
- */
-public abstract class ControlValueProperty extends SimpleValueProperty implements IJFXControlValueProperty {
+import javafx.scene.Node;
+
+@SuppressWarnings("javadoc")
+public abstract class ControlValueProperty<S, T> extends SimpleValueProperty<S, T>
+		implements IJFXControlValueProperty<S, T> {
 
 	@Override
-	public IJFXControlValueObservable observeDelayed(int delay, Control control) {
-		IObservableValue v = observe(control);
-		return new ControlDelayedObservableValueDecorator(Observables.observeDelayedValue(delay, v), control);
-	}
-
-	@Override
-	public IJFXControlValueObservable observeDelayed(int delay, @NonNull Node control) {
-		IObservableValue v = observe(control);
-		return new ControlDelayedObservableValueDecorator(Observables.observeDelayedValue(delay, v), control);
+	public IJFXControlValueObservable<T> observeDelayed(int delay, S control) {
+		IObservableValue<T> v = Observables.observeDelayedValue(delay, observe(control));
+		return new ControlDelayedObservableValueDecorator<>(v, (Node) control);
 	}
 
 	// ---
 
 	@Override
-	public IJFXControlValueObservable observe(Control control) {
-		IObservableValue v = super.observe(Realm.getDefault(), control);
-		return new ControlObservableValueDecorator(v);
-	}
-
-	@Override
-	public @NonNull IJFXControlValueObservable observe(@NonNull Node control) {
-		IObservableValue v = super.observe(Realm.getDefault(), control);
-		return new ControlObservableValueDecorator(v);
+	public @NonNull IJFXControlValueObservable<T> observe(S control) {
+		IObservableValue<T> v = super.observe(Realm.getDefault(), control);
+		return new ControlObservableValueDecorator<>(v);
 	}
 
 	// ---
 
 	@Override
-	public IJFXControlValueObservable observe(Realm realm, Control control) {
-		IObservableValue v = super.observe(realm, control);
-		return new ControlObservableValueDecorator(v);
+	public IJFXControlValueObservable<T> observe(Realm realm, S control) {
+		IObservableValue<T> v = super.observe(realm, control);
+		return new ControlObservableValueDecorator<>(v);
 	}
 
-	@Override
-	public IJFXControlValueObservable observe(@NonNull Realm realm, @NonNull Node control) {
-		IObservableValue v = super.observe(realm, control);
-		return new ControlObservableValueDecorator(v);
-	}
-
-	@Override
-	public IJFXControlValueObservable observe(Realm realm, Object source) {
-		if( realm == null ) {
-			throw new IllegalArgumentException("Realm can not be null"); //$NON-NLS-1$
-		}
-		if( source == null ) {
-			throw new IllegalArgumentException("Source can not be null"); //$NON-NLS-1$
-		}
-		return observe(realm, (Control)source);
-	}
-
-	@Override
-	public IJFXControlValueObservable observe(Object source) {
-		if( source == null ) {
-			throw new IllegalArgumentException("Source can not be null"); //$NON-NLS-1$
-		}
-		return observe((Control)source);
-	}
 }
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DatePickerValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DatePickerValueProperty.java
deleted file mode 100644
index eedaea8..0000000
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DatePickerValueProperty.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.fx.ui.databinding.internal;
-
-import java.time.LocalDate;
-
-import javafx.beans.property.Property;
-import javafx.scene.control.DatePicker;
-
-/**
- *
- */
-public class DatePickerValueProperty extends ControlPropertyValueProperty<LocalDate> {
-
-	@Override
-	public Object getValueType() {
-		return LocalDate.class;
-	}
-
-	@SuppressWarnings("null")
-	@Override
-	protected Property<LocalDate> getProperty(Object source) {
-		DatePicker p = (DatePicker) source;
-		return p.valueProperty();
-	}
-
-}
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DateValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DateValueProperty.java
new file mode 100644
index 0000000..4c06ffe
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/DateValueProperty.java
@@ -0,0 +1,27 @@
+package org.eclipse.fx.ui.databinding.internal;
+
+import java.time.LocalDate;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import javafx.beans.property.Property;
+import javafx.scene.control.DatePicker;
+
+@SuppressWarnings("javadoc")
+public class DateValueProperty<@NonNull S> extends ControlPropertyValueProperty<S,LocalDate> {
+
+	@Override
+	public Object getValueType() {
+		return LocalDate.class;
+	}
+
+	@SuppressWarnings("null")
+	@Override
+	protected Property<LocalDate> getProperty(S source) {
+		if( source instanceof DatePicker ) {
+			return ((DatePicker) source).valueProperty();
+		}
+		throw new IllegalArgumentException("Unable to get Date-Property from " + source); //$NON-NLS-1$
+	}
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/SingleSelectionProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/SingleSelectionProperty.java
index fdbb240..454d623 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/SingleSelectionProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/SingleSelectionProperty.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.fx.ui.databinding.internal;
 
+import org.eclipse.jdt.annotation.NonNull;
+
 import javafx.beans.property.ReadOnlyProperty;
 import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.ComboBox;
@@ -17,28 +19,26 @@
 import javafx.scene.control.SelectionModel;
 import javafx.scene.control.TableView;
 
-/**
- * Property for single selection
- */
-public class SingleSelectionProperty extends ControlReadOnlyPropertyValueProperty<Object> {
+@SuppressWarnings("javadoc")
+public class SingleSelectionProperty<@NonNull S,T> extends ControlReadOnlyPropertyValueProperty<S,T> {
 
 	@Override
 	public Object getValueType() {
 		return null;
-	} 
+	}
 
 	@SuppressWarnings("null")
 	@Override
-	protected ReadOnlyProperty<Object> getProperty(Object source) {
-		SelectionModel<Object> model = getSelectionModel(source);
+	protected ReadOnlyProperty<T> getProperty(S source) {
+		SelectionModel<T> model = getSelectionModel(source);
 		if( model == null ) {
 			throw new IllegalStateException("Unable to find selection model for '"+source+"'");  //$NON-NLS-1$//$NON-NLS-2$
 		}
 		return model.selectedItemProperty();
 	}
-	
+
 	@SuppressWarnings("unchecked")
-	static SelectionModel<Object> getSelectionModel(Object source) {
+	static <S,T> SelectionModel<T> getSelectionModel(S source) {
 		SelectionModel<Object> m = null;
 		if( source instanceof ListView<?> ) {
 			m = ((ListView<Object>) source).getSelectionModel();
@@ -49,11 +49,11 @@
 		} else if( source instanceof TableView<?> ) {
 			m = ((TableView<Object>) source).getSelectionModel();
 		}
-		return m;
+		return (SelectionModel<T>) m;
 	}
-	
+
 	@Override
-	protected void doSetValue(Object source, Object value) {
+	protected void doSetValue(S source, T value) {
 		SelectionModel<Object> o = getSelectionModel(source);
 		if( o != null ) {
 			if( value == null ) {
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TemplateComputedValue.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TemplateComputedValue.java
index 7a321fe..d0d3a29 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TemplateComputedValue.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TemplateComputedValue.java
@@ -25,7 +25,7 @@
 /**
  * A computed value using the the message template
  */
-public final class TemplateComputedValue extends ComputedValue {
+public final class TemplateComputedValue extends ComputedValue<String> {
 	@NonNull
 	private final List<@NonNull Struct> values;
 	@NonNull
@@ -79,7 +79,7 @@
 	}
 
 	@Override
-	protected Object calculate() {
+	protected String calculate() {
 		Object[] v = this.values.stream().map((o) -> this.converter.apply(o.property, o.value.getValue())).toArray();
 		return MessageFormat.format(this.template, v);
 	}
diff --git a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TextValueProperty.java b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TextValueProperty.java
index c947cc6..74c0058 100644
--- a/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TextValueProperty.java
+++ b/bundles/runtime/org.eclipse.fx.ui.databinding/src/org/eclipse/fx/ui/databinding/internal/TextValueProperty.java
@@ -2,7 +2,6 @@
 
 import java.lang.reflect.InvocationTargetException;
 
-import org.eclipse.fx.core.databinding.JFXBeanProperties;
 import org.eclipse.jdt.annotation.NonNull;
 
 import javafx.beans.property.Property;
@@ -11,20 +10,22 @@
 import javafx.scene.control.Tab;
 import javafx.scene.control.TextInputControl;
 
-public class TextValueProperty extends ControlPropertyValueProperty<String> {
+@SuppressWarnings("javadoc")
+public class TextValueProperty<S> extends ControlPropertyValueProperty<S,String> {
 
 	@Override
 	public Object getValueType() {
 		return String.class;
 	}
 
+	@SuppressWarnings("null")
 	@Override
-	protected @NonNull Property<String> getProperty(Object source) {
+	protected @NonNull Property<String> getProperty(S source) {
 		if( source instanceof TextInputControl ) {
 			TextInputControl field = (TextInputControl) source;
 			return field.textProperty();
 		} else if( source instanceof ComboBox<?> ) {
-			return ((ComboBox) source).getEditor().textProperty();
+			return ((ComboBox<?>) source).getEditor().textProperty();
 		} else if( source instanceof Cell<?> ) {
 			return ((Cell<?>) source).textProperty();
 		} else if( source instanceof Tab ) {
diff --git a/bundles/runtime/org.eclipse.fx.ui.di.interopt/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.di.interopt/META-INF/MANIFEST.MF
index 67d2f67..98e7f87 100644
--- a/bundles/runtime/org.eclipse.fx.ui.di.interopt/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.di.interopt/META-INF/MANIFEST.MF
@@ -2,22 +2,25 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Interopt
 Bundle-SymbolicName: org.eclipse.fx.ui.di.interopt
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.swt;bundle-version="3.100.1";resolution:=optional,
  org.eclipse.e4.core.contexts;bundle-version="1.2.0",
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
  org.eclipse.e4.core.di;bundle-version="1.5.0",
  org.eclipse.core.commands;bundle-version="3.7.0",
- org.eclipse.e4.core.commands;bundle-version="0.11.0"
+ org.eclipse.e4.core.commands;bundle-version="0.11.0",
+ org.eclipse.e4.core.services;bundle-version="2.0.0",
+ org.eclipse.e4.ui.services;bundle-version="1.2.0",
+ org.eclipse.e4.ui.workbench
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.di.interopt.UISynchronizeImpl.xml,
  OSGI-INF/services/org.eclipse.fx.ui.di.interopt.InteroptContextFunction.xml,
  OSGI-INF/services/org.eclipse.fx.ui.di.interopt.CommandServiceImplCF.xml
 Import-Package: javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.command;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0";resolution:=optional,
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.command;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0";resolution:=optional,
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.ui.di.interopt/pom.xml b/bundles/runtime/org.eclipse.fx.ui.di.interopt/pom.xml
index 106d0e1..d0ca2b3 100755
--- a/bundles/runtime/org.eclipse.fx.ui.di.interopt/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.di.interopt/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.di.interopt/src/org/eclipse/fx/ui/di/interopt/CommandServiceImpl.java b/bundles/runtime/org.eclipse.fx.ui.di.interopt/src/org/eclipse/fx/ui/di/interopt/CommandServiceImpl.java
index e9e067c..311a8a7 100644
--- a/bundles/runtime/org.eclipse.fx.ui.di.interopt/src/org/eclipse/fx/ui/di/interopt/CommandServiceImpl.java
+++ b/bundles/runtime/org.eclipse.fx.ui.di.interopt/src/org/eclipse/fx/ui/di/interopt/CommandServiceImpl.java
@@ -10,18 +10,33 @@
  *******************************************************************************/

 package org.eclipse.fx.ui.di.interopt;

 

+import java.util.HashMap;

 import java.util.Map;

 import java.util.Optional;

 

+import javax.annotation.PostConstruct;

 import javax.inject.Inject;

 

 import org.eclipse.core.commands.ParameterizedCommand;

 import org.eclipse.e4.core.commands.ECommandService;

 import org.eclipse.e4.core.commands.EHandlerService;

+import org.eclipse.e4.core.contexts.ContextInjectionFactory;

+import org.eclipse.e4.core.contexts.IEclipseContext;

+import org.eclipse.e4.core.contexts.RunAndTrack;

+import org.eclipse.e4.core.services.events.IEventBroker;

+import org.eclipse.e4.ui.services.IServiceConstants;

+import org.eclipse.e4.ui.workbench.UIEvents;

+import org.eclipse.fx.core.command.Command;

 import org.eclipse.fx.core.command.CommandService;

 import org.eclipse.jdt.annotation.NonNull;

 import org.eclipse.jdt.annotation.Nullable;

 

+import javafx.beans.Observable;

+import javafx.beans.property.ReadOnlyBooleanProperty;

+import javafx.beans.property.ReadOnlyBooleanWrapper;

+import javafx.collections.FXCollections;

+import javafx.collections.ObservableMap;

+

 /**

  * A command service implementation

  *

@@ -33,6 +48,8 @@
 	private final ECommandService commandService;

 	@NonNull

 	private final EHandlerService handlerService;

+	@NonNull

+	private final IEclipseContext context;

 

 	/**

 	 * Create a new instance

@@ -43,9 +60,10 @@
 	 *            handler service

 	 */

 	@Inject

-	public CommandServiceImpl(@NonNull ECommandService commandService, @NonNull EHandlerService handlerService) {

+	public CommandServiceImpl(@NonNull ECommandService commandService, @NonNull EHandlerService handlerService, @NonNull IEclipseContext context) {

 		this.commandService = commandService;

 		this.handlerService = handlerService;

+		this.context = context;

 	}

 

 	@Override

@@ -66,4 +84,90 @@
 		return Optional.ofNullable((O)this.handlerService.executeHandler(cmd));

 	}

 

+	@Override

+	public <O> Optional<Command<O>> createCommand(@NonNull String commandId) {

+		org.eclipse.core.commands.Command command = this.commandService.getCommand(commandId);

+		if (command == null || !command.isDefined()) {

+			return Optional.empty();

+		}

+		CommandImpl<O> c = new CommandImpl<O>(commandId, this.context);

+		ContextInjectionFactory.inject(c, this.context);

+		return Optional.of(c);

+	}

+

+	static class CommandImpl<O> implements Command<O> {

+		private final String commandId;

+		private CommandService commandService;

+		private final IEclipseContext context;

+

+		private ReadOnlyBooleanWrapper enabledProperty = new ReadOnlyBooleanWrapper(this, "enabled"); //$NON-NLS-1$

+		private final ObservableMap<String, String> parameters = FXCollections.observableMap(new HashMap<>());

+

+		public CommandImpl(String commandId, IEclipseContext context) {

+			this.commandId = commandId;

+			this.context = context;

+			this.parameters.addListener((Observable o) -> {

+				recalculateState();

+			});

+		}

+

+		@PostConstruct

+		void init(IEventBroker eventBroker) {

+//			eventBroker.subscribe(ScopedObjectFactory.KEYMODIFED_TOPIC, e -> recalculateState());

+			eventBroker.subscribe(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, e -> {

+				recalculateState();

+			});

+			eventBroker.subscribe(UIEvents.Dirtyable.TOPIC_DIRTY, e -> recalculateState());

+			this.context.runAndTrack(new RunAndTrack() {

+

+				@Override

+				public boolean changed(IEclipseContext context) {

+					context.get(IServiceConstants.ACTIVE_CONTEXTS);

+					context.get(IServiceConstants.ACTIVE_SELECTION);

+					context.get(IServiceConstants.ACTIVE_PART);

+					recalculateState();

+					return true;

+				}

+			});

+		}

+

+		@Override

+		public void evaluate() {

+			recalculateState();

+		}

+

+		@Inject

+		public void setCommandService(CommandService commandService) {

+			this.commandService = commandService;

+			recalculateState();

+		}

+

+		@SuppressWarnings({ "unchecked", "null" })

+		void recalculateState() {

+			this.enabledProperty.set(this.commandService.canExecute(this.commandId, (Map<String, Object>) (Map<?, ?>) this.parameters));

+		}

+

+		@Override

+		public ReadOnlyBooleanProperty enabledProperty() {

+			return this.enabledProperty.getReadOnlyProperty();

+		}

+

+		@Override

+		public boolean isEnabled() {

+			return this.enabledProperty.get();

+		}

+

+		@SuppressWarnings({ "null", "unchecked" })

+		@Override

+		public Optional<O> execute() {

+			return this.commandService.execute(this.commandId, (Map<String, Object>) (Map<?, ?>) this.parameters);

+		}

+

+		@Override

+		public ObservableMap<String, String> parameters() {

+			return this.parameters;

+		}

+

+	}

+

 }

diff --git a/bundles/runtime/org.eclipse.fx.ui.di/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.di/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.di/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.di/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.di/META-INF/MANIFEST.MF
index fa9153f..760021a 100755
--- a/bundles/runtime/org.eclipse.fx.ui.di/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.di/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ui.di
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.e4.core.contexts;bundle-version="0.9.0",
  org.eclipse.e4.core.di;bundle-version="0.9.0",
@@ -11,13 +11,13 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.annotation;version="1.0.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.fxml;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.osgi.util;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.fxml;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.osgi.util;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0"
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.fx.ui.di;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.di;version="3.0.0"
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.di.internal.ResourcePoolFactory.xml,
  OSGI-INF/services/org.eclipse.fx.ui.di.internal.FXMLLoaderSupplier.xml,
  OSGI-INF/services/org.eclipse.fx.ui.di.internal.ResourceServiceImpl.xml
diff --git a/bundles/runtime/org.eclipse.fx.ui.di/pom.xml b/bundles/runtime/org.eclipse.fx.ui.di/pom.xml
index e335213..339d78f 100755
--- a/bundles/runtime/org.eclipse.fx.ui.di/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.di/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.dialogs/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.dialogs/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.dialogs/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.dialogs/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.dialogs/META-INF/MANIFEST.MF
index 6e082f6..1c5b389 100755
--- a/bundles/runtime/org.eclipse.fx.ui.dialogs/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.dialogs/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Dialogs
 Bundle-SymbolicName: org.eclipse.fx.ui.dialogs
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.ui.dialogs;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.dialogs;version="3.0.0"
 Bundle-Vendor: Eclipse.org
-Import-Package: org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.ui.controls.stage;version="2.6.0",
- org.eclipse.fx.ui.panes;version="2.6.0"
+Import-Package: org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.ui.controls.stage;version="3.0.0",
+ org.eclipse.fx.ui.panes;version="3.0.0"
diff --git a/bundles/runtime/org.eclipse.fx.ui.dialogs/pom.xml b/bundles/runtime/org.eclipse.fx.ui.dialogs/pom.xml
index 8e6be9b..91d6fcd 100755
--- a/bundles/runtime/org.eclipse.fx.ui.dialogs/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.dialogs/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/META-INF/MANIFEST.MF
index fc5dee0..c7618a1 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: E4
 Bundle-SymbolicName: org.eclipse.fx.ui.keybindings.e4
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.1.0",
  org.eclipse.e4.core.di;bundle-version="1.1.0",
@@ -16,9 +16,9 @@
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Import-Package: javax.annotation;version="1.2.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.keybindings.service;version="2.6.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.service;version="3.0.0",
  org.osgi.service.event;version="1.3.1"
-Export-Package: org.eclipse.fx.ui.keybindings.e4;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.keybindings.e4;version="3.0.0"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/pom.xml b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/pom.xml
index d3e1efb..5dc9de9 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/META-INF/MANIFEST.MF
index 185b385..e9dfbc3 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Generic
 Bundle-SymbolicName: org.eclipse.fx.ui.keybindings.generic
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.core.commands;bundle-version="3.6.0",
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.keybindings.generic.BindingFactoryImpl.xml
 Bundle-Vendor: Eclipse.org
-Import-Package: org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.keybindings.service;version="2.6.0",
+Import-Package: org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.service;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/pom.xml b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/pom.xml
index 3806bc1..4612073 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings.generic/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.keybindings/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.keybindings/META-INF/MANIFEST.MF
index dbfb9b0..de1edf4 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Bindings
 Bundle-SymbolicName: org.eclipse.fx.ui.keybindings
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.core.commands;bundle-version="3.6.0",
@@ -11,6 +11,6 @@
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Import-Package: javax.annotation;version="1.0.0";resolution:=optional,
  javax.inject;version="1.0.0"
-Export-Package: org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.keybindings.service;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.service;version="3.0.0"
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.ui.keybindings/pom.xml b/bundles/runtime/org.eclipse.fx.ui.keybindings/pom.xml
index 155785d..1e0ab25 100755
--- a/bundles/runtime/org.eclipse.fx.ui.keybindings/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.keybindings/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.mobile/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.mobile/META-INF/MANIFEST.MF
index 283cc19..2d82b7a 100644
--- a/bundles/runtime/org.eclipse.fx.ui.mobile/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.mobile/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Mobile
 Bundle-SymbolicName: org.eclipse.fx.ui.mobile
-Bundle-Version: 2.6.0.qualifier
-Export-Package: org.eclipse.fx.ui.mobile;version="2.6.0",
- org.eclipse.fx.ui.mobile.animations;version="2.6.0"
+Bundle-Version: 3.0.0.qualifier
+Export-Package: org.eclipse.fx.ui.mobile;version="3.0.0",
+ org.eclipse.fx.ui.mobile.animations;version="3.0.0"
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/runtime/org.eclipse.fx.ui.mobile/pom.xml b/bundles/runtime/org.eclipse.fx.ui.mobile/pom.xml
index 595e934..a9b0491 100755
--- a/bundles/runtime/org.eclipse.fx.ui.mobile/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.mobile/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.modelviewer/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.modelviewer/META-INF/MANIFEST.MF
index c1e3850..26c82b5 100644
--- a/bundles/runtime/org.eclipse.fx.ui.modelviewer/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.modelviewer/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Modelviewer
 Bundle-SymbolicName: org.eclipse.fx.ui.modelviewer;singleton:=true
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.annotation;version="1.1.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core.databinding;version="2.3.0",
- org.eclipse.fx.core.di;version="2.3.0",
- org.eclipse.fx.core.log;version="2.3.0",
- org.eclipse.fx.ui.databinding;version="2.3.0"
+ org.eclipse.fx.core.databinding;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.databinding;version="3.0.0"
 Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.0.1",
  org.eclipse.core.databinding;bundle-version="1.4.1",
  org.eclipse.core.databinding.observable;bundle-version="1.4.1",
@@ -18,7 +18,7 @@
  org.eclipse.emf.databinding;bundle-version="1.3.0",
  org.eclipse.emf.databinding.edit;bundle-version="1.3.0",
  org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
-Export-Package: org.eclipse.fx.ui.modelviewer;version="2.3.0"
+Export-Package: org.eclipse.fx.ui.modelviewer;version="3.0.0"
 Service-Component: OSGI-INF/services/registry.xml,
  OSGI-INF/services/defaultDelegates.xml
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/runtime/org.eclipse.fx.ui.panes/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.panes/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.panes/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.panes/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.panes/META-INF/MANIFEST.MF
index f325dc2..35e3cc8 100755
--- a/bundles/runtime/org.eclipse.fx.ui.panes/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.panes/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ui.panes
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.fx.ui.panes;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.panes;version="3.0.0"
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
diff --git a/bundles/runtime/org.eclipse.fx.ui.panes/pom.xml b/bundles/runtime/org.eclipse.fx.ui.panes/pom.xml
index a84bd56..38568ed 100755
--- a/bundles/runtime/org.eclipse.fx.ui.panes/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.panes/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.services/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.services/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.services/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.services/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.services/META-INF/MANIFEST.MF
index 7829372..17bc5c7 100755
--- a/bundles/runtime/org.eclipse.fx.ui.services/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.services/META-INF/MANIFEST.MF
@@ -2,22 +2,22 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ui.services
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.ui.services;version="2.6.0",
- org.eclipse.fx.ui.services.commands;version="2.6.0",
- org.eclipse.fx.ui.services.dialog;version="2.6.0",
- org.eclipse.fx.ui.services.resources;version="2.6.0",
- org.eclipse.fx.ui.services.restart;version="2.6.0",
- org.eclipse.fx.ui.services.startup;version="2.6.0",
- org.eclipse.fx.ui.services.sync;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.services;version="3.0.0",
+ org.eclipse.fx.ui.services.commands;version="3.0.0",
+ org.eclipse.fx.ui.services.dialog;version="3.0.0",
+ org.eclipse.fx.ui.services.resources;version="3.0.0",
+ org.eclipse.fx.ui.services.restart;version="3.0.0",
+ org.eclipse.fx.ui.services.startup;version="3.0.0",
+ org.eclipse.fx.ui.services.sync;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0"
 Bundle-Vendor: %Bundle-Vendor
 Import-Package: javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.ui.controls;version="2.6.0",
- org.eclipse.fx.ui.controls.image;version="2.6.0",
- org.eclipse.fx.ui.controls.stage;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.ui.controls;version="3.0.0",
+ org.eclipse.fx.ui.controls.image;version="3.0.0",
+ org.eclipse.fx.ui.controls.stage;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0"
 Require-Bundle: org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
  org.eclipse.core.runtime;bundle-version="3.10.0";resolution:=optional
diff --git a/bundles/runtime/org.eclipse.fx.ui.services/pom.xml b/bundles/runtime/org.eclipse.fx.ui.services/pom.xml
index 68690bc..ba07fd1 100755
--- a/bundles/runtime/org.eclipse.fx.ui.services/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.services/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.services/src/org/eclipse/fx/ui/services/startup/StartupProgressTrackerService.java b/bundles/runtime/org.eclipse.fx.ui.services/src/org/eclipse/fx/ui/services/startup/StartupProgressTrackerService.java
index 0dfe355..8a404f2 100644
--- a/bundles/runtime/org.eclipse.fx.ui.services/src/org/eclipse/fx/ui/services/startup/StartupProgressTrackerService.java
+++ b/bundles/runtime/org.eclipse.fx.ui.services/src/org/eclipse/fx/ui/services/startup/StartupProgressTrackerService.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.fx.ui.services.startup;
 
+import org.eclipse.equinox.app.IApplication;
 import org.eclipse.equinox.app.IApplicationContext;
 
 /**
@@ -24,12 +25,14 @@
 		/**
 		 * Continue with the start process
 		 */
-		CONTINUE, /**
-					 * End the statt process and restart
-					 */
-		RESTART, /**
-					 * End the start process and shutdown
-					 */
+		CONTINUE,
+		/**
+		 * End the statt process and restart
+		 */
+		RESTART,
+		/**
+		 * End the start process and shutdown
+		 */
 		EXIT
 	}
 
@@ -46,32 +49,67 @@
 	 */
 	public enum DefaultProgressState implements ProgressState {
 		/**
-		 * The JavaFX subsystem has been initialized so
-		 * custom stages can be shown
+		 * The JavaFX subsystem has been initialized so custom stages can be
+		 * shown.
+		 * <p>
+		 * This state is guaranteed to be reached on JavaFX event thread
+		 * </p>
 		 */
 		JAVAFX_INITIALIZED,
 		/**
+		 * The JavaFX subsystem has been initialized so custom stages can be
+		 * shown.
+		 * <p>
+		 * This state is guaranteed to be reached on launcher thread
+		 * </p>
+		 * <p>
+		 * <strong>This state is only reach if you are launching on the if you are launching the E4MainThreadApplication</strong>
+		 * </p>
+		 */
+		JAVAFX_INITIALIZED_LAUNCHER_THREAD,
+		/**
 		 * The DI-System is started (in case the implementation has @Inject
 		 * annotated fields and methods the have been filled now with values)
+		 * <p>
+		 * This state is guaranteed to be reached on JavaFX event thread
+		 * </p>
 		 */
 		DI_SYSTEM_INITIALIZED,
-		 /**
-							 * The lifecycle @PostContextCreate has been
-							 * finished
-							 */
-		POST_CONTEXT_LF_FINISHED, /**
-									 * The workbench UI is shown
-									 */
+		/**
+		 * The lifecycle @PostContextCreate has been finished
+		 * <p>
+		 * This state is guaranteed to be reached on JavaFX event thread
+		 * </p>
+		 */
+		POST_CONTEXT_LF_FINISHED,
+		/**
+		 * The workbench UI is showing
+		 * <p>
+		 * This method is guaranteed to be called on JavaFX event thread
+		 * </p>
+		 */
 		WORKBENCH_GUI_SHOWING,
 		/**
+		 * The workbench UI is shown
+		 * <p>
+		 * This method is guaranteed to be called on JavaFX event thread
+		 * </p>
+		 */
+		WORKBENCH_GUI_SHOWN,
+		/**
 		 * State reached when check for workspace could not be locked
+		 * <p>
+		 * This state is guaranteed to be reached on JavaFX event thread
+		 * </p>
 		 */
 		LOCATION_CHECK_FAILED
 	}
 
 	/**
-	 * Invoked when the OSGi-Framework has been launched
-	 * 
+	 * Invoked when the OSGi-Framework has been launched. This method is
+	 * guaranteed to be called on the thread
+	 * {@link IApplication#start(IApplicationContext)} has been invoked
+	 *
 	 * @param applicationContext
 	 *            the application context
 	 * @return information how to proceed
@@ -80,7 +118,7 @@
 
 	/**
 	 * Method called when a certain state has been reached
-	 * 
+	 *
 	 * @param state
 	 *            the state reached
 	 */
diff --git a/bundles/runtime/org.eclipse.fx.ui.theme/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.theme/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.theme/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.theme/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.theme/META-INF/MANIFEST.MF
index 3b660f8..4ed90b8 100755
--- a/bundles/runtime/org.eclipse.fx.ui.theme/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.theme/META-INF/MANIFEST.MF
@@ -2,18 +2,18 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ui.theme;singleton:=true
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ui.theme.internal.Activator
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.jdt.annotation;bundle-version="1.1.0";resolution:=optional
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.theme.internal.DefaultThemeManager.xml
-Import-Package: org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.services;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0",
+Import-Package: org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.services;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
  org.osgi.service.event;version="1.3.0"
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.fx.ui.theme;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.theme;version="3.0.0"
diff --git a/bundles/runtime/org.eclipse.fx.ui.theme/pom.xml b/bundles/runtime/org.eclipse.fx.ui.theme/pom.xml
index ab3d29a..e6646e4 100755
--- a/bundles/runtime/org.eclipse.fx.ui.theme/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.theme/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.base/META-INF/MANIFEST.MF
index 9b478c5..c1d88bc 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.base/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Base
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench.base
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.1.0",
  org.eclipse.e4.ui.model.workbench;bundle-version="0.10.1",
@@ -20,21 +20,24 @@
  org.eclipse.e4.core.di.extensions,
  org.eclipse.e4.core.commands,
  org.eclipse.core.commands;bundle-version="3.6.100",
- org.eclipse.emf.ecore.xmi;bundle-version="2.11.0"
-Export-Package: org.eclipse.fx.ui.workbench.base;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.fx,org.eclipse.fx.ui.workbench.renderers.fx,org.eclipse.fx.ui.workbench.renderers.base",
- org.eclipse.fx.ui.workbench.base.rendering;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.fx,org.eclipse.fx.ui.workbench.renderers.fx,org.eclipse.fx.ui.workbench.renderers.base"
+ org.eclipse.emf.ecore.xmi;bundle-version="2.11.0",
+ org.eclipse.fx.core,
+ org.eclipse.fx.core.di
+Export-Package: org.eclipse.fx.ui.workbench.base;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.fx,org.eclipse.fx.ui.workbench.renderers.fx,org.eclipse.fx.ui.workbench.renderers.base",
+ org.eclipse.fx.ui.workbench.base.rendering;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.fx,org.eclipse.fx.ui.workbench.renderers.fx,org.eclipse.fx.ui.workbench.renderers.base"
 Import-Package: javax.annotation;version="1.2.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.adapter;version="2.6.0",
- org.eclipse.fx.core.command;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.services;version="2.6.0",
- org.eclipse.fx.ui.services.restart;version="2.6.0",
- org.eclipse.fx.ui.services.startup;version="2.6.0",
- org.eclipse.fx.ui.services.sync;version="2.6.0",
- org.eclipse.fx.ui.workbench.services;version="2.6.0",
- org.osgi.service.component.annotations;version="1.2.0"
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.adapter;version="3.0.0",
+ org.eclipse.fx.core.command;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.services;version="3.0.0",
+ org.eclipse.fx.ui.services.restart;version="3.0.0",
+ org.eclipse.fx.ui.services.startup;version="3.0.0",
+ org.eclipse.fx.ui.services.sync;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services;version="3.0.0",
+ org.osgi.service.component.annotations;version="1.2.0",
+ org.osgi.service.event;version="1.3.1"
 Bundle-Activator: org.eclipse.fx.ui.workbench.base.internal.Activator
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.workbench.base.internal.MementoCF.xml,
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.base/pom.xml
index 3c72e08..7ce5e14 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.base/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/AbstractE4Application.java b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/AbstractE4Application.java
index 0dac1e6..79d910f 100644
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/AbstractE4Application.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/AbstractE4Application.java
@@ -36,6 +36,7 @@
 import org.eclipse.e4.core.internal.services.EclipseAdapter;
 import org.eclipse.e4.core.services.adapter.Adapter;
 import org.eclipse.e4.core.services.contributions.IContributionFactory;
+import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.e4.core.services.log.ILoggerProvider;
 import org.eclipse.e4.core.services.log.Logger;
 import org.eclipse.e4.core.services.translation.TranslationProviderFactory;
@@ -82,7 +83,9 @@
 import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.DefaultProgressState;
 import org.eclipse.fx.ui.services.sync.UISynchronize;
 import org.eclipse.fx.ui.workbench.base.internal.Activator;
+import org.eclipse.fx.ui.workbench.base.internal.CommandEventDispatcher;
 import org.eclipse.fx.ui.workbench.base.internal.LoggerProviderImpl;
+import org.eclipse.fx.ui.workbench.base.rendering.ElementRenderer;
 import org.eclipse.fx.ui.workbench.base.restart.RestartPreferenceUtil;
 import org.eclipse.fx.ui.workbench.base.restart.RestartServiceImpl;
 import org.eclipse.fx.ui.workbench.services.EModelStylingService;
@@ -213,6 +216,9 @@
 			}
 
 			startupProgressTrackerService.stateReached(DefaultProgressState.DI_SYSTEM_INITIALIZED);
+			appContext.get(IEventBroker.class).subscribe(ElementRenderer.TOPIC_WINDOW_SHOWN, e -> {
+				startupProgressTrackerService.stateReached(DefaultProgressState.WORKBENCH_GUI_SHOWN);
+			});
 		}
 
 		// Get the factory to create DI instances with
@@ -538,6 +544,7 @@
 				return ContextInjectionFactory.make(SelectionServiceImpl.class, context);
 			}
 		});
+		ContextInjectionFactory.make(CommandEventDispatcher.class, appContext);
 	}
 
 	/**
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandEventDispatcher.java b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandEventDispatcher.java
new file mode 100644
index 0000000..d048636
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandEventDispatcher.java
@@ -0,0 +1,51 @@
+package org.eclipse.fx.ui.workbench.base.internal;

+

+import javax.inject.Inject;

+

+import org.eclipse.core.commands.CommandManager;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.core.commands.IExecutionListener;

+import org.eclipse.core.commands.NotHandledException;

+import org.eclipse.e4.core.di.annotations.Optional;

+import org.eclipse.fx.core.event.EventBus;

+

+public class CommandEventDispatcher implements IExecutionListener {

+	private EventBus eventBus;

+

+	@Inject

+	public CommandEventDispatcher(EventBus eventBus) {

+		this.eventBus = eventBus;

+	}

+

+	@Inject

+	void setManager(@Optional CommandManager manager) {

+		// Command manager is not there at the beginning hence with make it optional

+		if( manager != null ) {

+			manager.addExecutionListener(this);

+		}

+	}

+

+	@Override

+	public void notHandled(String commandId, NotHandledException exception) {

+

+	}

+

+	@Override

+	public void postExecuteFailure(String commandId, ExecutionException exception) {

+		// TODO Auto-generated method stub

+

+	}

+

+	@Override

+	public void postExecuteSuccess(String commandId, Object returnValue) {

+		// TODO Auto-generated method stub

+

+	}

+

+	@Override

+	public void preExecute(String commandId, ExecutionEvent event) {

+		// TODO Auto-generated method stub

+

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandServiceImpl.java b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandServiceImpl.java
index c3cc0b3..7d60aec 100644
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandServiceImpl.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/internal/CommandServiceImpl.java
@@ -10,18 +10,34 @@
  *******************************************************************************/

 package org.eclipse.fx.ui.workbench.base.internal;

 

+import java.util.HashMap;

 import java.util.Map;

 import java.util.Optional;

 

+import javax.annotation.PostConstruct;

 import javax.inject.Inject;

 

 import org.eclipse.core.commands.ParameterizedCommand;

 import org.eclipse.e4.core.commands.ECommandService;

 import org.eclipse.e4.core.commands.EHandlerService;

+import org.eclipse.e4.core.contexts.ContextInjectionFactory;

+import org.eclipse.e4.core.contexts.IEclipseContext;

+import org.eclipse.e4.core.contexts.RunAndTrack;

+import org.eclipse.e4.core.services.events.IEventBroker;

+import org.eclipse.e4.ui.services.IServiceConstants;

+import org.eclipse.e4.ui.workbench.UIEvents;

+import org.eclipse.fx.core.command.Command;

 import org.eclipse.fx.core.command.CommandService;

+import org.eclipse.fx.core.di.ScopedObjectFactory;

 import org.eclipse.jdt.annotation.NonNull;

 import org.eclipse.jdt.annotation.Nullable;

 

+import javafx.beans.Observable;

+import javafx.beans.property.ReadOnlyBooleanProperty;

+import javafx.beans.property.ReadOnlyBooleanWrapper;

+import javafx.collections.FXCollections;

+import javafx.collections.ObservableMap;

+

 /**

  * A command service implementation

  *

@@ -33,6 +49,8 @@
 	private final ECommandService commandService;

 	@NonNull

 	private final EHandlerService handlerService;

+	@NonNull

+	private final IEclipseContext context;

 

 	/**

 	 * Create a new instance

@@ -41,11 +59,14 @@
 	 *            command service

 	 * @param handlerService

 	 *            handler service

+	 * @param context

+	 *            the context

 	 */

 	@Inject

-	public CommandServiceImpl(@NonNull ECommandService commandService, @NonNull EHandlerService handlerService) {

+	public CommandServiceImpl(@NonNull ECommandService commandService, @NonNull EHandlerService handlerService, @NonNull IEclipseContext context) {

 		this.commandService = commandService;

 		this.handlerService = handlerService;

+		this.context = context;

 	}

 

 	@Override

@@ -63,7 +84,92 @@
 	@Override

 	public <O> Optional<O> execute(@NonNull String commandId, @NonNull Map<@NonNull String, @Nullable Object> parameters) {

 		ParameterizedCommand cmd = this.commandService.createCommand(commandId, parameters);

-		return Optional.ofNullable((O)this.handlerService.executeHandler(cmd));

+		return Optional.ofNullable((O) this.handlerService.executeHandler(cmd));

 	}

 

+	@Override

+	public <O> Optional<Command<O>> createCommand(@NonNull String commandId) {

+		org.eclipse.core.commands.Command command = this.commandService.getCommand(commandId);

+		if (command == null || !command.isDefined()) {

+			return Optional.empty();

+		}

+		CommandImpl<O> c = new CommandImpl<O>(commandId, this.context);

+		ContextInjectionFactory.inject(c, this.context);

+		return Optional.of(c);

+	}

+

+	static class CommandImpl<O> implements Command<O> {

+		private final String commandId;

+		private CommandService commandService;

+		private final IEclipseContext context;

+

+		private ReadOnlyBooleanWrapper enabledProperty = new ReadOnlyBooleanWrapper(this, "enabled"); //$NON-NLS-1$

+		private final ObservableMap<String, String> parameters = FXCollections.observableMap(new HashMap<>());

+

+		public CommandImpl(String commandId, IEclipseContext context) {

+			this.commandId = commandId;

+			this.context = context;

+			this.parameters.addListener((Observable o) -> {

+				recalculateState();

+			});

+		}

+

+		@PostConstruct

+		void init(IEventBroker eventBroker) {

+			eventBroker.subscribe(ScopedObjectFactory.KEYMODIFED_TOPIC, e -> recalculateState());

+			eventBroker.subscribe(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, e -> {

+				recalculateState();

+			});

+			eventBroker.subscribe(UIEvents.Dirtyable.TOPIC_DIRTY, e -> recalculateState());

+			this.context.runAndTrack(new RunAndTrack() {

+

+				@Override

+				public boolean changed(IEclipseContext context) {

+					context.get(IServiceConstants.ACTIVE_CONTEXTS);

+					context.get(IServiceConstants.ACTIVE_SELECTION);

+					context.get(IServiceConstants.ACTIVE_PART);

+					recalculateState();

+					return true;

+				}

+			});

+		}

+

+		@Override

+		public void evaluate() {

+			recalculateState();

+		}

+

+		@Inject

+		public void setCommandService(CommandService commandService) {

+			this.commandService = commandService;

+			recalculateState();

+		}

+

+		@SuppressWarnings({ "unchecked", "null" })

+		void recalculateState() {

+			this.enabledProperty.set(this.commandService.canExecute(this.commandId, (Map<String, Object>) (Map<?, ?>) this.parameters));

+		}

+

+		@Override

+		public ReadOnlyBooleanProperty enabledProperty() {

+			return this.enabledProperty.getReadOnlyProperty();

+		}

+

+		@Override

+		public boolean isEnabled() {

+			return this.enabledProperty.get();

+		}

+

+		@SuppressWarnings({ "null", "unchecked" })

+		@Override

+		public Optional<O> execute() {

+			return this.commandService.execute(this.commandId, (Map<String, Object>) (Map<?, ?>) this.parameters);

+		}

+

+		@Override

+		public ObservableMap<String, String> parameters() {

+			return this.parameters;

+		}

+

+	}

 }

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/rendering/ElementRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/rendering/ElementRenderer.java
index c3b75bb..74d30f5 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/rendering/ElementRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.base/src/org/eclipse/fx/ui/workbench/base/rendering/ElementRenderer.java
@@ -17,7 +17,7 @@
 
 /**
  * Base interface implemented by all renderers
- * 
+ *
  * @param <M>
  *            the model element type
  * @param <C>
@@ -25,8 +25,13 @@
  */
 public interface ElementRenderer<M extends MUIElement, C> {
 	/**
+	 * Event sent if a window is finally shown
+	 */
+	public static final String TOPIC_WINDOW_SHOWN = "org/eclipse/fx/ui/workbench/base/rendering/window/shown"; //$NON-NLS-1$
+
+	/**
 	 * Create the widget for the given model element
-	 * 
+	 *
 	 * @param element
 	 *            the model element
 	 * @return the widget created
@@ -35,7 +40,7 @@
 
 	/**
 	 * Setup the context for rendering the element
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 * @return the context
@@ -44,7 +49,7 @@
 
 	/**
 	 * Bind the widget and the element together
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 * @param widget
@@ -54,7 +59,7 @@
 
 	/**
 	 * Process the elements content
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 */
@@ -62,7 +67,7 @@
 
 	/**
 	 * Post process the element
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 */
@@ -70,7 +75,7 @@
 
 	/**
 	 * Inform the that a direct child of the parentElement has been rendered
-	 * 
+	 *
 	 * @param parentElement
 	 *            the parent
 	 * @param element
@@ -80,7 +85,7 @@
 
 	/**
 	 * Inform about destruction of the element
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 */
@@ -88,7 +93,7 @@
 
 	/**
 	 * Hide the child of the element
-	 * 
+	 *
 	 * @param parent
 	 *            the element container
 	 * @param element
@@ -98,7 +103,7 @@
 
 	/**
 	 * Destroy the widget associated with the element
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 */
@@ -106,7 +111,7 @@
 
 	/**
 	 * Retrieve the model context for the given element
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 * @return the context
@@ -115,7 +120,7 @@
 
 	/**
 	 * Focus the given element
-	 * 
+	 *
 	 * @param element
 	 *            the element to focus
 	 */
@@ -123,7 +128,7 @@
 
 	/**
 	 * Get the widget for the given elemenet
-	 * 
+	 *
 	 * @param element
 	 *            the element
 	 * @return the widget
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/META-INF/MANIFEST.MF
index a1bdf07..2652dd9 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fx
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench.fx;singleton:=true
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.core.contexts;bundle-version="1.1.0",
  org.eclipse.e4.core.di;bundle-version="1.1.0",
@@ -20,35 +20,36 @@
  org.eclipse.e4.core.di.extensions;bundle-version="0.12.0",
  org.eclipse.fx.core
 Import-Package: org.apache.commons.lang.text;version="2.6.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.databinding;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.function;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.osgi.util;version="2.6.0",
- org.eclipse.fx.ui.controls.dialog;version="2.6.0",
- org.eclipse.fx.ui.controls.stage;version="2.6.0",
- org.eclipse.fx.ui.dialogs;version="2.6.0",
- org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.keybindings.e4;version="2.6.0",
- org.eclipse.fx.ui.keybindings.service;version="2.6.0",
- org.eclipse.fx.ui.services;version="2.6.0",
- org.eclipse.fx.ui.services.commands;version="2.6.0",
- org.eclipse.fx.ui.services.dialog;version="2.6.0",
- org.eclipse.fx.ui.services.resources;version="2.6.0",
- org.eclipse.fx.ui.services.startup;version="2.6.0",
- org.eclipse.fx.ui.services.sync;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0",
- org.eclipse.fx.ui.workbench.base;version="2.6.0",
- org.eclipse.fx.ui.workbench.base.rendering;version="2.6.0",
- org.eclipse.fx.ui.workbench.renderers.base.widget;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.databinding;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.function;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.osgi.util;version="3.0.0",
+ org.eclipse.fx.ui.controls.dialog;version="3.0.0",
+ org.eclipse.fx.ui.controls.stage;version="3.0.0",
+ org.eclipse.fx.ui.dialogs;version="3.0.0",
+ org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.e4;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.service;version="3.0.0",
+ org.eclipse.fx.ui.services;version="3.0.0",
+ org.eclipse.fx.ui.services.commands;version="3.0.0",
+ org.eclipse.fx.ui.services.dialog;version="3.0.0",
+ org.eclipse.fx.ui.services.resources;version="3.0.0",
+ org.eclipse.fx.ui.services.startup;version="3.0.0",
+ org.eclipse.fx.ui.services.sync;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0",
+ org.eclipse.fx.ui.workbench.base;version="3.0.0",
+ org.eclipse.fx.ui.workbench.base.rendering;version="3.0.0",
+ org.eclipse.fx.ui.workbench.renderers.base.widget;version="3.0.0",
  org.eclipse.osgi.service.environment;version="1.3.0",
  org.osgi.framework;version="1.6.0",
  org.osgi.service.component.annotations;version="1.2.0",
  org.osgi.service.event;version="1.3.0"
-Export-Package: org.eclipse.fx.ui.workbench.fx;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.workbench.fx.key;version="2.6.0";x-internal:=true,
- org.eclipse.fx.ui.workbench.fx.perspective;version="2.6.0";x-internal:=true
+Export-Package: org.eclipse.fx.ui.workbench.fx;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.workbench.fx.key;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.workbench.fx.perspective;version="3.0.0";x-internal:=true,
+ org.eclipse.fx.ui.workbench.fx.services;version="3.0.0";x-internal:=true
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.workbench.fx.internal.UISynchronizeImpl.xml,
  OSGI-INF/services/org.eclipse.fx.ui.workbench.fx.key.FxKeyLookup.xml,
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/plugin.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/plugin.xml
index 7c2c085..bdb24ef 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/plugin.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/plugin.xml
@@ -21,7 +21,7 @@
             thread="main"
             visible="true">
          <run
-               class="org.eclipse.fx.ui.workbench.fx.E4Application">
+               class="org.eclipse.fx.ui.workbench.fx.E4MainThreadApplication">
          </run>
       </application>
    </extension>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/pom.xml
index 950899a..5440573 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4Application.java b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4Application.java
index ccdc445..8f981a7 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4Application.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4Application.java
@@ -32,6 +32,7 @@
 import org.eclipse.fx.ui.services.resources.GraphicsLoader;
 import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService;
 import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.DefaultProgressState;
+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.ProgressState;
 import org.eclipse.fx.ui.services.sync.UISynchronize;
 import org.eclipse.fx.ui.services.theme.Theme;
 import org.eclipse.fx.ui.services.theme.ThemeManager;
@@ -72,6 +73,8 @@
 	Object returnValue;
 	protected EventAdmin eventAdmin;
 
+	StartupProgressTrackerService startupService;
+
 	/**
 	 * Gets the {@link E4Application}.
 	 * <p>
@@ -92,17 +95,18 @@
 	public Object start(IApplicationContext context) throws Exception {
 		SELF = this;
 		this.applicationContext = context;
-		
+
 		Bundle b = FrameworkUtil.getBundle(AbstractJFXApplication.class);
 		BundleContext bundleContext = b.getBundleContext();
 		ServiceReference<EventAdmin> ref = bundleContext.getServiceReference(EventAdmin.class);
 		if (ref != null) {
 			this.eventAdmin = bundleContext.getService(ref);
 		}
-		
+
 		ServiceReference<StartupProgressTrackerService> serviceReference = bundleContext.getServiceReference(StartupProgressTrackerService.class);
 		if( serviceReference != null ) {
-			bundleContext.getService(serviceReference).osgiApplicationLaunched(this.applicationContext);
+			this.startupService = bundleContext.getService(serviceReference);
+			this.startupService.osgiApplicationLaunched(this.applicationContext);
 		} else {
 			// if the service is not available we make sure to bring the splash down
 			this.applicationContext.applicationRunning();
@@ -134,18 +138,8 @@
 	 *            {@link Application}.
 	 */
 	public void jfxStart(IApplicationContext context, Application jfxApplication, Stage primaryStage) {
-		Bundle b = FrameworkUtil.getBundle(AbstractJFXApplication.class);
-		BundleContext bundleContext = b.getBundleContext();
+		updateStartupState(DefaultProgressState.JAVAFX_INITIALIZED);
 
-		ServiceReference<StartupProgressTrackerService> serviceReference = bundleContext.getServiceReference(StartupProgressTrackerService.class);
-		StartupProgressTrackerService service = null;
-		if( serviceReference != null ) {
-			service = bundleContext.getService(serviceReference);
-			service.stateReached(DefaultProgressState.JAVAFX_INITIALIZED);
-		}
-		
-		StartupProgressTrackerService fservice = service;
-		
 		Runnable startRunnable = new Runnable() {
 			@Override
 			public void run() {
@@ -171,12 +165,10 @@
 					E4Application.this.instanceLocation = (Location) wbContext.get(E4Workbench.INSTANCE_LOCATION);
 					try {
 						if (!checkInstanceLocation(E4Application.this.instanceLocation, wbContext)) {
-							if( fservice != null ) {
-								fservice.stateReached(DefaultProgressState.LOCATION_CHECK_FAILED);
-							}
+							updateStartupState(DefaultProgressState.LOCATION_CHECK_FAILED);
 							return;
 						}
-							
+
 						// Create and run the UI (if any)
 						workbench.createAndRunUI(E4Application.this.workbench.getApplication());
 					} finally {
@@ -331,14 +323,7 @@
 	protected void postJfxStarted(final IApplicationContext context) {
 		final Map<String, Object> map = new HashMap<String, Object>();
 		sendEvent(Constants.APPLICATION_LAUNCHED, map);
-		
-		Bundle b = FrameworkUtil.getBundle(AbstractJFXApplication.class);
-		BundleContext bundleContext = b.getBundleContext();
-
-		ServiceReference<StartupProgressTrackerService> serviceReference = bundleContext.getServiceReference(StartupProgressTrackerService.class);
-		if( serviceReference != null ) {
-			bundleContext.getService(serviceReference).stateReached(DefaultProgressState.WORKBENCH_GUI_SHOWING);
-		}
+		updateStartupState(DefaultProgressState.WORKBENCH_GUI_SHOWING);
 	}
 
 	@Override
@@ -346,6 +331,16 @@
 		return JFXRealm.createDefault();
 	}
 
+	/**
+	 * Update the startup progress state
+	 * @param progressState
+	 */
+	protected void updateStartupState(ProgressState progressState) {
+		if( this.startupService != null ) {
+			this.startupService.stateReached(progressState);
+		}
+	}
+
 	@Override
 	protected IResourceUtilities<Image> createResourceUtility(final IEclipseContext appContext) {
 		return new IResourceUtilities<Image>() {
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4MainThreadApplication.java b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4MainThreadApplication.java
new file mode 100644
index 0000000..bbfc007
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/E4MainThreadApplication.java
@@ -0,0 +1,101 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.workbench.fx;

+

+import java.util.concurrent.CountDownLatch;

+

+import org.eclipse.fx.core.Util;

+import org.eclipse.fx.core.databinding.JFXRealm;

+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.DefaultProgressState;

+

+import com.sun.javafx.application.PlatformImpl;

+

+import javafx.application.Application;

+import javafx.stage.Stage;

+

+/**

+ * An E4Application who assumes to be launched at the same thread as the

+ * OSGi-Launcher

+ */

+@SuppressWarnings("restriction")

+public class E4MainThreadApplication extends E4Application {

+	static CountDownLatch STARTUP_LATCH = new CountDownLatch(1);

+	static CountDownLatch SHUTDOWN_LATCH = new CountDownLatch(1);

+

+	void super_launchE4JavaFxApplication() throws Exception {

+		super.launchE4JavaFxApplication();

+	}

+

+	@Override

+	protected void launchE4JavaFxApplication() throws Exception {

+		if (Util.isMacOS()) {

+			PlatformImpl.addListener(new PlatformImpl.FinishListener() {

+

+				@Override

+				public void idle(boolean implicitExit) {

+					jfxStop();

+					PlatformImpl.removeListener(this);

+				}

+

+				@Override

+				public void exitCalled() {

+					// nothing to do

+				}

+			});

+

+			PlatformImpl.startup(() -> {

+				JFXRealm.createDefault();

+				jfxStart(getApplicationContext(), null, null);

+				updateStartupState(DefaultProgressState.JAVAFX_INITIALIZED_LAUNCHER_THREAD);

+			});

+		} else {

+			Thread t = new Thread() {

+				@Override

+				public void run() {

+					try {

+						super_launchE4JavaFxApplication();

+					} catch (Exception e) {

+						SHUTDOWN_LATCH.countDown();

+						e.printStackTrace();

+					}

+				}

+			};

+			t.start();

+

+			STARTUP_LATCH.await();

+			updateStartupState(DefaultProgressState.JAVAFX_INITIALIZED_LAUNCHER_THREAD);

+			SHUTDOWN_LATCH.await();

+		}

+	}

+

+	@Override

+	protected Class<? extends Application> getJfxApplicationClass() {

+		return ExtendedE4Application.class;

+	}

+

+	/**

+	 * Extended application used on none OS-X system to appropriately handle

+	 * lifecycle semantics

+	 */

+	public static class ExtendedE4Application extends DefaultJFXApp {

+		@Override

+		public void start(Stage primaryStage) throws Exception {

+			STARTUP_LATCH.countDown();

+			super.start(primaryStage);

+		}

+

+		@Override

+		public void stop() throws Exception {

+			super.stop();

+			SHUTDOWN_LATCH.countDown();

+		}

+	}

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/PartRenderingEngine.java b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/PartRenderingEngine.java
index d19e84c..9f8aca8 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/PartRenderingEngine.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/PartRenderingEngine.java
@@ -347,13 +347,12 @@
 
 			// Check if the control is already rendered
 			if (renderer != null) {
-				if (parentRenderer != null && container != null) {
+				if (!(element instanceof MWindow) && parentRenderer != null && container != null) {
 					try {
 						parentRenderer.hideChild(container, element);
 					} catch (Throwable t) {
 						this.logger.error(t.getMessage(), t);
 					}
-
 				}
 
 				// Need clean up everything below
@@ -380,6 +379,13 @@
 					// now remove the selected element
 					removeGui(selectedElement);
 				}
+				if ((element instanceof MWindow) && parentRenderer != null && container != null) {
+					try {
+						parentRenderer.hideChild(container, element);
+					} catch (Throwable t) {
+						this.logger.error(t.getMessage(), t);
+					}
+				}
 
 				if (element instanceof MContribution) {
 					MContribution contribution = (MContribution) element;
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/InteractiveStartupService.java b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/InteractiveStartupService.java
new file mode 100644
index 0000000..292f308
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/InteractiveStartupService.java
@@ -0,0 +1,103 @@
+/*******************************************************************************

+ * Copyright (c) 2016 BestSolution.at and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.fx.ui.workbench.fx.services;

+

+import java.net.URL;

+import java.util.concurrent.CountDownLatch;

+

+import org.eclipse.equinox.app.IApplicationContext;

+import org.eclipse.fx.core.Util;

+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService;

+import org.osgi.framework.Bundle;

+

+import com.sun.javafx.tk.Toolkit;

+

+import javafx.animation.KeyFrame;

+import javafx.animation.Timeline;

+import javafx.scene.Scene;

+import javafx.scene.image.Image;

+import javafx.stage.Screen;

+import javafx.stage.Stage;

+import javafx.stage.StageStyle;

+import javafx.util.Duration;

+

+/**

+ * Base class to implement a service to implement an interactive startup experience

+ */

+public abstract class InteractiveStartupService implements StartupProgressTrackerService {

+	private IApplicationContext applicationContext;

+	private Stage stage;

+

+	private CountDownLatch hideLatch = new CountDownLatch(1);

+

+	@Override

+	public OSGiRV osgiApplicationLaunched(IApplicationContext applicationContext) {

+		this.applicationContext = applicationContext;

+		return OSGiRV.CONTINUE;

+	}

+

+	protected abstract Scene createScene(IApplicationContext applicationContext, Image splashImage);

+

+	protected void show() {

+		if( Util.isMacOS() ) {

+			this.stage.show();

+			this.applicationContext.applicationRunning();

+		} else {

+			this.stage.setOnShown( e -> {

+				new Timeline(new KeyFrame(Duration.millis(100), (ev) -> {

+					Toolkit.getToolkit().exitNestedEventLoop(this, null);

+					this.hideLatch.countDown();

+				})).play();

+			});

+			this.stage.show();

+			Toolkit.getToolkit().enterNestedEventLoop(this);

+		}

+	}

+

+	@Override

+	public void stateReached(ProgressState state) {

+		if( state == DefaultProgressState.JAVAFX_INITIALIZED ) {

+			Bundle bundle = this.applicationContext.getBrandingBundle();

+			URL url = bundle.getResource("splash.bmp"); //$NON-NLS-1$

+			if( url != null ) {

+				Image img = new Image(url.toExternalForm());

+				this.stage = new Stage(StageStyle.TRANSPARENT);

+				this.stage.setScene(createScene(this.applicationContext, img));

+				if( Util.isMacOS() ) {

+					double x = Screen.getPrimary().getVisualBounds().getWidth() / 2 - img.getWidth() / 2 - 1;

+					double y = 227;

+					this.stage.setX(x);

+					this.stage.setY(y);

+					show();

+				} else {

+					double x = Screen.getPrimary().getBounds().getWidth() / 2 - img.getWidth() / 2 - 1;

+					double y = Screen.getPrimary().getBounds().getHeight() / 2 - img.getHeight() / 2;

+					this.stage.setX(x);

+					this.stage.setY(y);

+					show();

+				}

+			}

+		} else if( state == DefaultProgressState.JAVAFX_INITIALIZED_LAUNCHER_THREAD ) {

+			if( ! Util.isMacOS() ) {

+				try {

+					this.hideLatch.await();

+				} catch (InterruptedException e) {

+					// nothing to do

+				}

+				this.applicationContext.applicationRunning();

+			}

+

+		} else if( state == DefaultProgressState.WORKBENCH_GUI_SHOWN ) {

+			this.stage.hide();

+		}

+	}

+

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/NativeSplashStartupService.java b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/NativeSplashStartupService.java
new file mode 100644
index 0000000..b130260
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.fx/src/org/eclipse/fx/ui/workbench/fx/services/NativeSplashStartupService.java
@@ -0,0 +1,41 @@
+package org.eclipse.fx.ui.workbench.fx.services;

+

+import java.util.concurrent.CountDownLatch;

+

+import org.eclipse.equinox.app.IApplicationContext;

+import org.eclipse.fx.core.Util;

+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService;

+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.DefaultProgressState;

+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService.OSGiRV;

+

+public class NativeSplashStartupService implements StartupProgressTrackerService {

+	private IApplicationContext applicationContext;

+	private CountDownLatch hideLatch = new CountDownLatch(1);

+

+	@Override

+	public OSGiRV osgiApplicationLaunched(IApplicationContext applicationContext) {

+		this.applicationContext = applicationContext;

+		return OSGiRV.CONTINUE;

+	}

+

+	@Override

+	public void stateReached(ProgressState state) {

+		if( state == DefaultProgressState.JAVAFX_INITIALIZED_LAUNCHER_THREAD ) {

+			if( ! Util.isMacOS() ) {

+				try {

+					this.hideLatch.await();

+				} catch (InterruptedException e) {

+					// nothing to do

+				}

+				this.applicationContext.applicationRunning();

+			}

+		} else if( state == DefaultProgressState.WORKBENCH_GUI_SHOWN ) {

+			if( ! Util.isMacOS() ) {

+				this.hideLatch.countDown();

+			} else {

+				this.applicationContext.applicationRunning();

+			}

+		}

+	}

+

+}

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/META-INF/MANIFEST.MF
index a4d5360..3880986 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Base
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench.renderers.base
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
  org.eclipse.e4.core.contexts;bundle-version="1.1.0",
  org.eclipse.e4.core.services;bundle-version="1.0.0",
@@ -19,21 +19,21 @@
 Import-Package: com.google.common.base;version="15.0.0",
  javax.annotation;version="1.0.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.di;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.keybindings.e4;version="2.6.0",
- org.eclipse.fx.ui.workbench.base.rendering;version="2.6.0",
- org.eclipse.fx.ui.workbench.services;version="2.6.0",
- org.eclipse.fx.ui.workbench.services.lifecycle.annotation;version="2.6.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.di;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.keybindings.e4;version="3.0.0",
+ org.eclipse.fx.ui.workbench.base.rendering;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services.lifecycle.annotation;version="3.0.0",
  org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
  org.osgi.service.event;version="1.3.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.ui.workbench.renderers.base;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.workbench.renderers.base.addons;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.workbench.renderers.base.services;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
- org.eclipse.fx.ui.workbench.renderers.base.widget;version="2.6.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx"
+Export-Package: org.eclipse.fx.ui.workbench.renderers.base;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.workbench.renderers.base.addons;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.workbench.renderers.base.services;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx",
+ org.eclipse.fx.ui.workbench.renderers.base.widget;version="3.0.0";x-friends:="org.eclipse.fx.ui.workbench.renderers.fx"
 Bundle-Vendor: Eclipse.org
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.workbench.renderers.base.internal.MaximizationServiceContextFunction.xml
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/pom.xml
index 54c20f3..acc9f44 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseWindowRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseWindowRenderer.java
index 6ec8ed7..a9855df 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseWindowRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseWindowRenderer.java
@@ -27,7 +27,6 @@
 import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.ui.MContext;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
-import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
 import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow;
@@ -317,8 +316,19 @@
 				// if we don't we see strange invalid context types sticking
 				// around in PartRenderingEngine.clearContext
 				MWindow element = param.getDomElement();
-				if (element != null && !((MApplicationElement) element.getParent() instanceof MApplication)) {
-					element.setToBeRendered(false);
+				if (element != null) {
+					if( !((MApplicationElement) element.getParent() instanceof MApplication) ) {
+						// If this is not a top level hide it
+						BaseWindowRenderer.this.presentationEngine.removeGui(element); // Workarund for a Bug in EPartService-Impl causing exceptions
+						element.setToBeRendered(false);
+					} else {
+						if( element.getParent().getChildren().stream().filter( c -> c.isToBeRendered() ).count() > 1 ) {
+							BaseWindowRenderer.this.presentationEngine.removeGui(element); // Workarund for a Bug in EPartService-Impl causing exceptions
+							element.setToBeRendered(false);
+						} else {
+							BaseWindowRenderer.this.presentationEngine.removeGui(element);
+						}
+					}
 				}
 
 				if (element != null && shouldRemoveWindowFromModel(element)) {
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WStack.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WStack.java
index bfd5520..ebe120c 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WStack.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WStack.java
@@ -33,6 +33,10 @@
 	 */
 	public static final String TAG_PAGINATION = "fx_pagination"; //$NON-NLS-1$
 	/**
+	 * Tag to use a StackPane control
+	 */
+	public static final String TAG_STACKPANE = "fx_stackpane"; //$NON-NLS-1$
+	/**
 	 * None of the tabs can be closed
 	 * @since 1.2
 	 */
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF
index 9b674b5..450277f 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fx
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench.renderers.fx
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="0.10.1",
  org.eclipse.core.commands;bundle-version="3.6.0",
@@ -20,30 +20,30 @@
 Import-Package: com.google.common.base;version="15.0.0",
  javax.annotation;version="1.0.0";resolution:=optional,
  javax.inject;version="1.0.0",
- org.eclipse.fx.core;version="2.6.0",
- org.eclipse.fx.core.log;version="2.6.0",
- org.eclipse.fx.ui.controls;version="2.6.0",
- org.eclipse.fx.ui.controls.dialog;version="2.6.0",
- org.eclipse.fx.ui.controls.dnd;version="2.6.0",
- org.eclipse.fx.ui.controls.markers;version="2.6.0",
- org.eclipse.fx.ui.controls.stage;version="2.6.0",
- org.eclipse.fx.ui.controls.tabpane;version="2.6.0",
- org.eclipse.fx.ui.di;version="2.6.0",
- org.eclipse.fx.ui.dialogs;version="2.6.0",
- org.eclipse.fx.ui.keybindings;version="2.6.0",
- org.eclipse.fx.ui.panes;version="2.6.0",
- org.eclipse.fx.ui.services;version="2.6.0",
- org.eclipse.fx.ui.services.dialog;version="2.6.0",
- org.eclipse.fx.ui.services.resources;version="2.6.0",
- org.eclipse.fx.ui.services.sync;version="2.6.0",
- org.eclipse.fx.ui.services.theme;version="2.6.0",
- org.eclipse.fx.ui.workbench.base.rendering;version="2.6.0",
- org.eclipse.fx.ui.workbench.fx;version="2.6.0",
- org.eclipse.fx.ui.workbench.fx.key;version="2.6.0",
- org.eclipse.fx.ui.workbench.renderers.base;version="2.6.0",
- org.eclipse.fx.ui.workbench.renderers.base.services;version="2.6.0",
- org.eclipse.fx.ui.workbench.renderers.base.widget;version="2.6.0",
- org.eclipse.fx.ui.workbench.services;version="2.6.0"
+ org.eclipse.fx.core;version="3.0.0",
+ org.eclipse.fx.core.log;version="3.0.0",
+ org.eclipse.fx.ui.controls;version="3.0.0",
+ org.eclipse.fx.ui.controls.dialog;version="3.0.0",
+ org.eclipse.fx.ui.controls.dnd;version="3.0.0",
+ org.eclipse.fx.ui.controls.markers;version="3.0.0",
+ org.eclipse.fx.ui.controls.stage;version="3.0.0",
+ org.eclipse.fx.ui.controls.tabpane;version="3.0.0",
+ org.eclipse.fx.ui.di;version="3.0.0",
+ org.eclipse.fx.ui.dialogs;version="3.0.0",
+ org.eclipse.fx.ui.keybindings;version="3.0.0",
+ org.eclipse.fx.ui.panes;version="3.0.0",
+ org.eclipse.fx.ui.services;version="3.0.0",
+ org.eclipse.fx.ui.services.dialog;version="3.0.0",
+ org.eclipse.fx.ui.services.resources;version="3.0.0",
+ org.eclipse.fx.ui.services.sync;version="3.0.0",
+ org.eclipse.fx.ui.services.theme;version="3.0.0",
+ org.eclipse.fx.ui.workbench.base.rendering;version="3.0.0",
+ org.eclipse.fx.ui.workbench.fx;version="3.0.0",
+ org.eclipse.fx.ui.workbench.fx.key;version="3.0.0",
+ org.eclipse.fx.ui.workbench.renderers.base;version="3.0.0",
+ org.eclipse.fx.ui.workbench.renderers.base.services;version="3.0.0",
+ org.eclipse.fx.ui.workbench.renderers.base.widget;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services;version="3.0.0"
 Service-Component: OSGI-INF/services/org.eclipse.fx.ui.workbench.renderers.fx.internal.FXDialogServiceFunction.xml,
  OSGI-INF/services/org.eclipse.fx.ui.workbench.renderers.fx.internal.DefaultDnDFeedback.xml,
  OSGI-INF/services/org.eclipse.fx.ui.workbench.renderers.fx.internal.PartPopupMenuServiceFunction.xml
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/pom.xml
index 2fc5e4c..d062e15 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
index 56b094c..c9b639a 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
@@ -76,7 +76,7 @@
 			WPart<BorderPane, Node, Node> part = ((WPart<BorderPane, Node, Node>) element.getWidget());
 			if (part == null)
 				return;
-			if (!checkFocusControl((Node) part.getWidget())) {
+			if (!checkFocusControl((Node) part.getStaticLayoutNode())) {
 				Node node = (Node) part.getWidget();
 				node.requestFocus();
 			}
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefSashRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefSashRenderer.java
index 01a30df..987920d 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefSashRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefSashRenderer.java
@@ -22,9 +22,7 @@
 import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
 import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainerElement;
 import org.eclipse.e4.ui.workbench.UIEvents;
-import org.eclipse.fx.ui.panes.GridData;
-import org.eclipse.fx.ui.panes.GridData.Alignment;
-import org.eclipse.fx.ui.panes.GridLayoutPane;
+import org.eclipse.fx.core.log.Logger.Level;
 import org.eclipse.fx.ui.panes.SashPane;
 import org.eclipse.fx.ui.workbench.renderers.base.BaseRenderer;
 import org.eclipse.fx.ui.workbench.renderers.base.BaseSashRenderer;
@@ -42,6 +40,10 @@
 import javafx.scene.Node;
 import javafx.scene.control.SplitPane;
 import javafx.scene.control.SplitPane.Divider;
+import javafx.scene.layout.ColumnConstraints;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.RowConstraints;
 
 /**
  * default renderer for sash
@@ -60,67 +62,40 @@
 		}
 	}
 
-	static class WFixedSashImpl extends WLayoutedWidgetImpl<GridLayoutPane, Node, MPartSashContainer> implements WSash<Node> {
+	static class WFixedSashImpl extends WLayoutedWidgetImpl<GridPane, Node, MPartSashContainer> implements WSash<Node> {
 
-		private static @NonNull GridData toGridData(Map<String, String> dataMap) {
-			GridData gd = new GridData();
-			if (dataMap.containsKey(WSash.FIXED_LAYOUT_WIDTH)) {
-				gd.widthHintProperty().set(Integer.parseInt(dataMap.get(WSash.FIXED_LAYOUT_WIDTH)));
-				if (!dataMap.containsKey(WSash.FIXED_LAYOUT_HEIGHT)) {
-					gd.grabExcessVerticalSpaceProperty().set(true);
-					gd.verticalAlignmentProperty().set(Alignment.FILL);
-				}
-			} else {
-				gd.horizontalAlignmentProperty().set(Alignment.FILL);
-			}
+		static RowConstraints toRowConstraint(Map<String, String> dataMap) {
+			RowConstraints r;
 
 			if (dataMap.containsKey(WSash.FIXED_LAYOUT_HEIGHT)) {
-				gd.heightHintProperty().set(Integer.parseInt(dataMap.get(WSash.FIXED_LAYOUT_HEIGHT)));
-				if (!dataMap.containsKey(WSash.FIXED_LAYOUT_WIDTH)) {
-					gd.grabExcessHorizontalSpaceProperty().set(true);
-					gd.horizontalAlignmentProperty().set(Alignment.FILL);
-				}
+				int h = Integer.parseInt(dataMap.get(WSash.FIXED_LAYOUT_HEIGHT));
+				r = new RowConstraints(h);
 			} else {
-				gd.verticalAlignmentProperty().set(Alignment.FILL);
+				r = new RowConstraints();
 			}
 
-			if (dataMap.containsKey(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL)) {
-				gd.grabExcessHorizontalSpaceProperty().set(Boolean.parseBoolean(dataMap.get(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL)));
-				gd.horizontalAlignmentProperty().set(Alignment.FILL);
+			if( dataMap.containsKey(WSash.FIXED_LAYOUT_GRAB_VERTICAL) && Boolean.parseBoolean(dataMap.get(WSash.FIXED_LAYOUT_GRAB_VERTICAL)) ) {
+				r.setVgrow(Priority.ALWAYS);
 			}
 
-			if (dataMap.containsKey(WSash.FIXED_LAYOUT_GRAB_VERTICAL)) {
-				gd.grabExcessVerticalSpaceProperty().set(Boolean.parseBoolean(dataMap.get(WSash.FIXED_LAYOUT_GRAB_VERTICAL)));
-				gd.verticalAlignmentProperty().set(Alignment.FILL);
-			}
-
-			return gd;
+			return r;
 		}
 
+		static ColumnConstraints toColConstraint(Map<String, String> dataMap) {
+			ColumnConstraints c;
 
-		private final @NonNull MPartSashContainer mPartSashContainer;
-
-		@Inject
-		public WFixedSashImpl(@NonNull @Named(BaseRenderer.CONTEXT_DOM_ELEMENT) MPartSashContainer mPartSashContainer) {
-			this.mPartSashContainer = mPartSashContainer;
-		}
-
-		@Override
-		public void addItem(WLayoutedWidget<MPartSashContainerElement> widget) {
-			Node n = (Node) widget.getStaticLayoutNode();
-
-			GridLayoutPane p = getWidget();
-			MPartSashContainer element = getDomElement();
-			if ( element != null && element.isHorizontal()) {
-				p.setNumColumns(p.getNumColumns() + 1);
+			if( dataMap.containsKey(WSash.FIXED_LAYOUT_WIDTH) ) {
+				int w = Integer.parseInt(dataMap.get(WSash.FIXED_LAYOUT_WIDTH));
+				c = new ColumnConstraints(w);
+			} else {
+				c = new ColumnConstraints();
 			}
 
-			MPartSashContainerElement domElement2 = widget.getDomElement();
-			if( domElement2 != null ) {
-				GridData gd = toGridData(domElement2.getPersistedState());
-				GridLayoutPane.setConstraint(n, gd);
+			if (dataMap.containsKey(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL) && Boolean.parseBoolean(dataMap.get(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL)) )  {
+				c.setHgrow(Priority.ALWAYS);
 			}
-			p.getChildren().add(n);
+
+			return c;
 		}
 
 		@Override
@@ -128,79 +103,176 @@
 			return getWidget().getChildren().size();
 		}
 
+		private static void fixIndex(GridPane p, MPartSashContainer c) {
+			if( c.isHorizontal() ) {
+				int i = 0;
+				for( Node n : p.getChildren() ) {
+					GridPane.setColumnIndex(n, Integer.valueOf(i));
+
+					Map<String, String> map = c.getChildren().get(i).getPersistedState();
+
+					if( map.containsKey(WSash.FIXED_LAYOUT_GRAB_VERTICAL) ) {
+						if( Boolean.parseBoolean(map.get(WSash.FIXED_LAYOUT_GRAB_VERTICAL)) ) {
+							GridPane.setFillHeight(n, Boolean.TRUE);
+							GridPane.setVgrow(n, Priority.ALWAYS);
+						}
+					} else {
+						GridPane.setFillHeight(n, Boolean.TRUE);
+						GridPane.setVgrow(n, Priority.ALWAYS);
+					}
+					i++;
+				}
+			} else {
+				int i = 0;
+				for( Node n : p.getChildren() ) {
+					GridPane.setRowIndex(n, Integer.valueOf(i));
+					Map<String, String> map = c.getChildren().get(i).getPersistedState();
+
+					if( map.containsKey(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL) ) {
+						if( Boolean.parseBoolean(map.get(WSash.FIXED_LAYOUT_GRAB_HORIZONTAL)) ) {
+							GridPane.setHgrow(n, Priority.ALWAYS);
+							GridPane.setFillWidth(n, Boolean.TRUE);
+						}
+					} else {
+						GridPane.setHgrow(n, Priority.ALWAYS);
+						GridPane.setFillWidth(n, Boolean.TRUE);
+					}
+
+					i++;
+				}
+			}
+		}
+
+		@Override
+		public void addItem(WLayoutedWidget<MPartSashContainerElement> widget) {
+			Node n = (Node) widget.getStaticLayoutNode();
+
+			GridPane p = getWidget();
+			MPartSashContainer domElement = getDomElement();
+			MPartSashContainerElement widgetElement = widget.getDomElement();
+
+			if( domElement == null ) {
+				this.logger.log(Level.ERROR, "Could not find DOM element for '"+this+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
+			}
+
+			if( widgetElement == null ) {
+				this.logger.log(Level.ERROR, "Could not find DOM element for '"+widget+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
+			}
+
+			if( domElement.isHorizontal() ) {
+				p.getColumnConstraints().add(toColConstraint(widgetElement.getPersistedState()));
+			} else {
+				p.getRowConstraints().add(toRowConstraint(widgetElement.getPersistedState()));
+			}
+			p.getChildren().add(n);
+
+			fixIndex(p, domElement);
+		}
+
 		@Override
 		public void addItems(List<WLayoutedWidget<MPartSashContainerElement>> list) {
 			List<Node> nodeList = new ArrayList<Node>();
-			GridLayoutPane p = getWidget();
+			GridPane p = getWidget();
+
+			MPartSashContainer domElement = getDomElement();
+
+			if( domElement == null ) {
+				this.logger.log(Level.ERROR, "Could not find DOM element for '"+this+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
+			}
 
 			for (WLayoutedWidget<MPartSashContainerElement> w : list) {
 				Node n = (Node) w.getStaticLayoutNode();
 
-				MPartSashContainerElement element = w.getDomElement();
-				if( element != null ) {
-					GridData gd = toGridData(element.getPersistedState());
-					GridLayoutPane.setConstraint(n, gd);
+				MPartSashContainerElement widgetElement = w.getDomElement();
+				if( widgetElement != null ) {
+					if( domElement.isHorizontal() ) {
+						p.getColumnConstraints().add(toColConstraint(widgetElement.getPersistedState()));
+					} else {
+						p.getRowConstraints().add(toRowConstraint(widgetElement.getPersistedState()));
+					}
 				}
 				nodeList.add(n);
 			}
 
-			MPartSashContainer element = getDomElement();
-			if (element != null && element.isHorizontal()) {
-				p.setNumColumns(p.getNumColumns() + nodeList.size());
-			}
-
 			p.getChildren().addAll(nodeList);
+			fixIndex(p,domElement);
 		}
 
 		@Override
 		public void addItems(int index, List<WLayoutedWidget<MPartSashContainerElement>> list) {
 			List<Node> nodeList = new ArrayList<Node>();
-			GridLayoutPane p = getWidget();
+			GridPane p = getWidget();
+
+			MPartSashContainer domElement = getDomElement();
+			if( domElement == null ) {
+				this.logger.log(Level.ERROR, "Could not find DOM element for '"+this+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
+			}
+
+			List<ColumnConstraints> columnConstraints = new ArrayList<>();
+			List<RowConstraints> rowConstraints = new ArrayList<>();
 
 			for (WLayoutedWidget<MPartSashContainerElement> w : list) {
 				Node n = (Node) w.getStaticLayoutNode();
 
 				MPartSashContainerElement element = w.getDomElement();
 				if( element != null ) {
-					GridData gd = toGridData(element.getPersistedState());
-					GridLayoutPane.setConstraint(n, gd);
+					if( domElement.isHorizontal() ) {
+						columnConstraints.add(toColConstraint(element.getPersistedState()));
+					} else {
+						rowConstraints.add(toRowConstraint(element.getPersistedState()));
+					}
+				} else {
+					this.logger.log(Level.ERROR, "Could not find DOM element for '"+w+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+					return;
 				}
+
 				nodeList.add(n);
 			}
 
-			MPartSashContainer element = getDomElement();
-			if (element != null && element.isHorizontal()) {
-				p.setNumColumns(p.getNumColumns() + nodeList.size());
+			if( domElement.isHorizontal() ) {
+				p.getColumnConstraints().addAll(index, columnConstraints);
+			} else {
+				p.getRowConstraints().addAll(index,rowConstraints);
 			}
 
 			p.getChildren().addAll(index, nodeList);
+			fixIndex(p, domElement);
 		}
 
 		@Override
 		public void removeItem(WLayoutedWidget<MPartSashContainerElement> widget) {
 			Node n = (Node) widget.getStaticLayoutNode();
-			GridLayoutPane p = getWidget();
+			GridPane p = getWidget();
 			MPartSashContainer domElement = getDomElement();
 
-			if( domElement != null && domElement.isHorizontal() ) {
-				p.setNumColumns(p.getNumColumns() - 1);
+			if( domElement == null ) {
+				this.logger.log(Level.ERROR, "Could not find DOM element for '"+this+"'"); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
+			}
+
+			int idx = p.getChildren().indexOf(n);
+
+			if( domElement.isHorizontal() ) {
+				p.getColumnConstraints().remove(idx);
+			} else {
+				p.getRowConstraints().remove(idx);
 			}
 			p.getChildren().remove(n);
+			fixIndex(p, domElement);
 		}
 
 		@Override
-		public GridLayoutPane getWidgetNode() {
+		public GridPane getWidgetNode() {
 			return getWidget();
 		}
 
 		@Override
-		protected GridLayoutPane createWidget() {
-			GridLayoutPane p = new GridLayoutPane();
-			p.setMarginWidth(0);
-			p.setMarginHeight(0);
-			p.setHorizontalSpacing(0);
-			p.setVerticalSpacing(0);
-			p.setNumColumns(this.mPartSashContainer.isHorizontal() ? 0 : 1);
+		protected GridPane createWidget() {
+			GridPane p = new GridPane();
 			return p;
 		}
 
@@ -315,17 +387,9 @@
 			return getWidget();
 		}
 
-		private static void setResizableWithParent(WLayoutedWidget widget) {
-			MUIElement domElement = widget.getDomElement();
-			if( domElement != null ) {
-				SplitPane.setResizableWithParent((Node)widget.getStaticLayoutNode(), ! domElement.getTags().contains(WSash.TAG_NO_AUTO_RESIZE));
-			}
-		}
-
 		@Override
 		public void addItem(WLayoutedWidget<MPartSashContainerElement> widget) {
 			SplitPane p = getWidget();
-			setResizableWithParent(widget);
 			p.getItems().add((Node) widget.getStaticLayoutNode());
 			this.items.add(widget);
 			updateDividers();
@@ -336,7 +400,6 @@
 			SplitPane p = getWidget();
 			List<Node> l = new ArrayList<Node>();
 			for (WLayoutedWidget<MPartSashContainerElement> i : list) {
-				setResizableWithParent(i);
 				l.add((Node) i.getStaticLayoutNode());
 			}
 			p.getItems().addAll(index, l);
@@ -349,7 +412,6 @@
 			SplitPane p = getWidget();
 			List<Node> l = new ArrayList<Node>();
 			for (WLayoutedWidget<MPartSashContainerElement> i : list) {
-				setResizableWithParent(i);
 				l.add((Node) i.getStaticLayoutNode());
 			}
 			p.getItems().addAll(l);
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java
index b213fc6..acab0dd 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java
@@ -13,6 +13,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -74,6 +75,8 @@
 	protected Class<? extends WStack<Node, Object, Node>> getWidgetClass(MPartStack stack) {
 		if (stack.getTags().contains(WStack.TAG_PAGINATION)) {
 			return PaginationWidgetImpl.class;
+		} else if (stack.getTags().contains(WStack.TAG_STACKPANE)) {
+			return StackPaneWidgetImpl.class;
 		} else {
 			return StackWidgetImpl.class;
 		}
@@ -695,4 +698,176 @@
 			this.initCallback = null;
 		}
 	}
+	
+	static class StackPaneWidgetImpl extends WLayoutedWidgetImpl<Node, Node, MPartStack> implements WStack<Node, Object, Node> {
+		@NonNull
+		List<@NonNull WStackItem<Object, Node>> items = new ArrayList<>();
+		@Nullable
+		WCallback<WStackItem<Object, Node>, Void> mouseSelectedItemCallback;
+
+		@Override
+		public void setMinMaxCallback(WCallback<WMinMaxState, Void> minMaxCallback) {
+			// TODO Auto-generated method stub
+		}
+
+		@Override
+		public void setMinMaxState(WMinMaxState state) {
+			// TODO Auto-generated method stub
+		}
+
+		@Override
+		public Class<? extends WStackItem<Object, Node>> getStackItemClass() {
+			return StackPaneItemImpl.class;
+		}
+
+		@Override
+		public StackPane getWidget() {
+			return (StackPane) super.getWidget();
+		}
+		
+		private void addChildNode(WStackItem<Object, Node> item) {
+			addStackPaneItem((StackPaneItemImpl)item);
+		}
+		
+		@Override
+		public void addItem(WStackItem<Object, Node> item) {
+			this.items.add(item);
+			addChildNode(item);
+		}
+
+		@Override
+		public void addItems(List<@NonNull WStackItem<Object, Node>> items) {
+			this.items.addAll(items);
+			items.stream().map(item -> (StackPaneItemImpl)item).forEach(this::addStackPaneItem);
+		}
+
+		@Override
+		public void addItems(int index, @NonNull List<@NonNull WStackItem<Object, Node>> items) {
+			this.items.addAll(index, items);
+			List<Node> collect = items.stream().map(item -> (StackPaneItemImpl)item)
+					.filter(item -> item.getNativeItem() != null)
+					.map(StackPaneItemImpl::getNativeItem)
+					.collect(Collectors.toList());
+			collect.forEach(node -> {
+				node.setVisible(false);
+				node.setManaged(false);
+			});
+			getWidget().getChildren().addAll(index, collect);
+		}
+		
+		private void addStackPaneItem(StackPaneItemImpl item) {
+			Node node = item.getNativeItem();
+			if (node != null) {
+				node.setVisible(false);
+				node.setManaged(false);
+				getWidget().getChildren().add(node);
+			}
+		}
+
+		@Override
+		public void selectItem(int idx) {
+			int index = (idx == -1) ? 0 : idx;
+			if (this.items.size() > index) {
+				StackPaneItemImpl item = (StackPaneItemImpl)this.items.get(index);
+				item.handleSelection();
+				
+				getWidget().getChildren().forEach(node -> {
+					node.setVisible(false);
+					node.setManaged(false);
+				});
+				Node node = getWidget().getChildren().get(index);
+				node.setVisible(true);
+				node.setManaged(true);
+			}
+		}
+
+		@Override
+		public int indexOf(WStackItem<Object, Node> item) {
+			return this.items.indexOf(item);
+		}
+
+		@Override
+		public List<@NonNull WStackItem<Object, Node>> getItems() {
+			return this.items;
+		}
+
+		@Override
+		public void removeItems(List<WStackItem<Object, Node>> items) {
+			this.items.removeAll(items);
+		}
+
+		@Override
+		public void setMouseSelectedItemCallback(WCallback<WStack.WStackItem<Object, Node>, Void> selectedItemCallback) {
+			this.mouseSelectedItemCallback = selectedItemCallback;
+		}
+
+		@Override
+		public void setKeySelectedItemCallback(WCallback<WStack.WStackItem<Object, Node>, Void> selectedItemCallback) {
+			// empty
+		}
+
+		@Override
+		public int getItemCount() {
+			return this.items.size();
+		}
+
+		@Override
+		public StackPane getWidgetNode() {
+			return getWidget();
+		}
+
+		@Override
+		protected StackPane createWidget() {
+			return new StackPane();
+		}
+
+		@Override
+		public void setDragStartCallback(@NonNull WCallback<@NonNull DragData, @NonNull Boolean> dragStackCallback) {
+			// no drag in this control
+		}
+	}
+	
+	static class StackPaneItemImpl implements WStackItem<Object, Node> {
+		private WCallback<WStackItem<Object, Node>, Node> initCallback;
+		private StackPane internalPane = new StackPane();
+		private MStackElement domElement;
+		
+		void handleSelection() {
+			if (this.initCallback != null) {
+				this.internalPane.getChildren().add(this.initCallback.call(this));
+				this.initCallback = null;
+			}
+		}
+
+		@Override
+		public Node getNativeItem() {
+			return this.internalPane;
+		}
+
+		@Override
+		public void setDomElement(MStackElement domElement) {
+			this.domElement = domElement;
+		}
+
+		@Override
+		public MStackElement getDomElement() {
+			return this.domElement;
+		}
+
+		@Override
+		public void setInitCallback(WCallback<WStackItem<Object, Node>, Node> callback) {
+			this.initCallback = callback;
+		}
+
+		@Override
+		public void setOnCloseCallback(WCallback<WStackItem<Object, Node>, Boolean> callback) {
+			// there's no close
+		}
+
+		@PreDestroy
+		public void dispose() {
+			this.initCallback = null;
+		}
+	}
+	
 }
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefWindowRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefWindowRenderer.java
index 4132c2e..062a864 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefWindowRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefWindowRenderer.java
@@ -424,6 +424,9 @@
 			}
 
 			this.stage.setOnCloseRequest(this::handleOnCloseRequest);
+			this.stage.setOnShown( e -> {
+				this.eventBroker.send(TOPIC_WINDOW_SHOWN, this.stage);
+			});
 
 			this.stage.focusedProperty().addListener(this::handledFocus);
 			this.stage.setFullScreen(this.fullscreen);
@@ -970,8 +973,7 @@
 		public void addChildWindow(WWindow<?> widget) {
 			this.windows.add(widget);
 			if (this.initDone && this.stage.isShowing()) {
-				Stage s = (Stage) widget.getWidget();
-				s.show();
+				widget.show();
 			}
 		}
 
@@ -1031,6 +1033,7 @@
 
 			// I don't think sub-windows should be activated
 			for (WWindow<?> c : this.windows) {
+				System.err.println("SHOW CHILD: " + c);
 				c.show();
 				this.eventBroker.send(Constants.WINDOW_SHOWN, this.mWindow);
 			}
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.services/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/runtime/org.eclipse.fx.ui.workbench.services/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 0000000..9489e3f
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.services/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1

+enabled=true

+generateBundleActivationPolicyLazy=true

+path=OSGI-INF/services

+validationErrorLevel=error

+validationErrorLevel.missingImplicitUnbindMethod=error

diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.services/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.services/META-INF/MANIFEST.MF
index eca4788..cdd70d9 100644
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.services/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.services/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Services
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench.services
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
  org.eclipse.jdt.annotation;bundle-version="2.0.0";resolution:=optional,
@@ -12,9 +12,9 @@
  org.eclipse.e4.core.di;bundle-version="1.4.0",
  org.eclipse.emf.common,
  org.eclipse.emf.ecore;bundle-version="2.10.0"
-Export-Package: org.eclipse.fx.ui.workbench.services;version="2.6.0",
- org.eclipse.fx.ui.workbench.services.lifecycle;version="2.6.0",
- org.eclipse.fx.ui.workbench.services.lifecycle.annotation;version="2.6.0"
+Export-Package: org.eclipse.fx.ui.workbench.services;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services.lifecycle;version="3.0.0",
+ org.eclipse.fx.ui.workbench.services.lifecycle.annotation;version="3.0.0"
 Import-Package: javax.annotation;version="1.2.0";resolution:=optional,
  javax.inject;version="1.0.0",
  org.osgi.service.component.annotations;version="1.2.0",
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.services/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench.services/pom.xml
index 57ad35c..fcf6359 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.services/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.services/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench3/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench3/META-INF/MANIFEST.MF
index 3c91c00..0f70d9e 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench3/META-INF/MANIFEST.MF
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench3/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ui.workbench3
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Require-Bundle: org.eclipse.ui.workbench;bundle-version="3.7.0";visibility:=reexport,
  org.eclipse.swt;bundle-version="3.7.0";visibility:=reexport,
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench3/pom.xml b/bundles/runtime/org.eclipse.fx.ui.workbench3/pom.xml
index 74f8334..d1856e2 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench3/pom.xml
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench3/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.shared.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.converter/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.converter/META-INF/MANIFEST.MF
index cfb255e..8b628ac 100755
--- a/bundles/tooling/org.eclipse.fx.ide.converter/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.converter/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Converter
 Bundle-SymbolicName: org.eclipse.fx.ide.converter;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.resources;bundle-version="3.7.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.converter/pom.xml b/bundles/tooling/org.eclipse.fx.ide.converter/pom.xml
index 0e6747c..0592941 100755
--- a/bundles/tooling/org.eclipse.fx.ide.converter/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.converter/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/META-INF/MANIFEST.MF
index ecf9610..1474a35 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Proposals
 Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.proposals
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.fx.ui.controls;bundle-version="2.3.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/pom.xml
index 57cb742..6359f00 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.proposals/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.tests/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.tests/META-INF/MANIFEST.MF
index e41d7c5..dc2b89b 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext.tests/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.css.cssext.tests

 Bundle-Vendor: My Company

-Bundle-Version: 2.3.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.tests;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.css.cssext;bundle-version="2.3.0",

diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui.debug/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui.debug/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..2ec99b3
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui.debug/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Debug
+Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.ui.debug;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.fx.core;bundle-version="0.1.1",
+ org.eclipse.fx.core.guice;bundle-version="0.1.1",
+ org.eclipse.zest.core;bundle-version="1.3.0",
+ org.eclipse.zest.layouts;bundle-version="1.1.0",
+ org.eclipse.fx.ide.css.cssext.ui;bundle-version="0.1.1",
+ org.eclipse.ui;bundle-version="3.8.0",
+ org.eclipse.fx.ide.css.ui;bundle-version="0.1.1",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.xtext.ui;bundle-version="2.3.0"
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/META-INF/MANIFEST.MF
index dc4da51..9bfa0f4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.css.cssext.ui

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.ui;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.css.cssext;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/pom.xml
index 602b42a..7a1e2f1 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext/META-INF/MANIFEST.MF
index dfb5aaf..971f6a4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.css.cssext

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext/pom.xml
index 37e4aca..a01ead3 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.cssext/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
index d6e0096..317dbc2 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Jfx2
 Bundle-SymbolicName: org.eclipse.fx.ide.css.jfx2
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/pom.xml
index 0a1802e..ac904af 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
index bdb8425..a1af927 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Jfx8
 Bundle-SymbolicName: org.eclipse.fx.ide.css.jfx8
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse.org
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/pom.xml
index 550bae6..7f7f8d4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.tests/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.tests/META-INF/MANIFEST.MF
index 4625c16..3b0c679 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.tests/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 2.3.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css.tests;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.css;bundle-version="2.3.0",

diff --git a/bundles/tooling/org.eclipse.fx.ide.css.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.ui/META-INF/MANIFEST.MF
index f7879a4..3a6e753 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css.ui;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.css;bundle-version="2.3.0";visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.css.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css.ui/pom.xml
index b49c140..6352242 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
index 3e1a358..135cda4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.css;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;bundle-version="2.0.0";visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.css/pom.xml b/bundles/tooling/org.eclipse.fx.ide.css/pom.xml
index 193d87d..f8e36a3 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.css/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/META-INF/MANIFEST.MF
index 47b9406..389b799 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.fxgraph.ui; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.fxgraph;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/pom.xml
index d75dcac..0cca3c1 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.fxgraph.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxgraph/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.fxgraph/META-INF/MANIFEST.MF
index 6f3f80d..260b33e 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxgraph/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.fxgraph/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.fxgraph; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;bundle-version="2.6.0";visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.fxgraph/pom.xml b/bundles/tooling/org.eclipse.fx.ide.fxgraph/pom.xml
index 9f2de68..04d21ca 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxgraph/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.fxgraph/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/META-INF/MANIFEST.MF
index 88454cf..7c8e23c 100644
--- a/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: Compiler

 Bundle-SymbolicName: org.eclipse.fx.ide.fxml.compiler

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Require-Bundle: org.eclipse.xtend.lib,

  com.google.guava,

diff --git a/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/pom.xml b/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/pom.xml
index ee73945..a88caa6 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.fxml.compiler/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxml/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.fxml/META-INF/MANIFEST.MF
index 3c1c1c2..557a67b 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxml/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.fxml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fxml
 Bundle-SymbolicName: org.eclipse.fx.ide.fxml;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.fxml.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxml/pom.xml b/bundles/tooling/org.eclipse.fx.ide.fxml/pom.xml
index 19772ea..d324268 100755
--- a/bundles/tooling/org.eclipse.fx.ide.fxml/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.fxml/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/META-INF/MANIFEST.MF
index b361618..7618354 100644
--- a/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: GModel Language UI

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.gmodel.ui; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.gmodel;bundle-version="2.3.0";visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/pom.xml
index f6c9624..7ec5fc4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.gmodel.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.gmodel/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.gmodel/META-INF/MANIFEST.MF
index 021d4f9..08ede86 100644
--- a/bundles/tooling/org.eclipse.fx.ide.gmodel/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.gmodel/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: GModel DSL core

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.gmodel; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.gmodel/pom.xml b/bundles/tooling/org.eclipse.fx.ide.gmodel/pom.xml
index f76d78c..fbc480e 100755
--- a/bundles/tooling/org.eclipse.fx.ide.gmodel/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.gmodel/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.java6/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.java6/META-INF/MANIFEST.MF
index 594f101..ac71ec7 100755
--- a/bundles/tooling/org.eclipse.fx.ide.java6/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.java6/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: JavaFX Tooling Java Check

 Bundle-SymbolicName: org.eclipse.fx.ide.java6;singleton:=true

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-Vendor: Eclipse.org

 Require-Bundle: org.eclipse.core.runtime,

  org.eclipse.ui;bundle-version="3.7.0"

diff --git a/bundles/tooling/org.eclipse.fx.ide.java6/pom.xml b/bundles/tooling/org.eclipse.fx.ide.java6/pom.xml
index dd9e94a..f533cbe 100755
--- a/bundles/tooling/org.eclipse.fx.ide.java6/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.java6/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.jdt.core/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.jdt.core/META-INF/MANIFEST.MF
index e892946..81a85fc 100755
--- a/bundles/tooling/org.eclipse.fx.ide.jdt.core/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.jdt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ide.jdt.core;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.jdt.core;bundle-version="3.7.0",
  org.eclipse.equinox.common;bundle-version="3.6.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.jdt.core/pom.xml b/bundles/tooling/org.eclipse.fx.ide.jdt.core/pom.xml
index 1564954..d762987 100755
--- a/bundles/tooling/org.eclipse.fx.ide.jdt.core/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.jdt.core/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.jdt.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.jdt.ui/META-INF/MANIFEST.MF
index 7ccac09..be372da 100755
--- a/bundles/tooling/org.eclipse.fx.ide.jdt.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.jdt.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ide.jdt.ui;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.jdt.ui.internal.JavaFXUIPlugin
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
diff --git a/bundles/tooling/org.eclipse.fx.ide.jdt.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.jdt.ui/pom.xml
index b17493e..9544deb 100755
--- a/bundles/tooling/org.eclipse.fx.ide.jdt.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.jdt.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/META-INF/MANIFEST.MF
index 127cbb7..37f5d16 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.l10n.ui

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.l10n.ui; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.l10n;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/pom.xml
index ad6514b..c906414 100755
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/contentassist/.NLSDslProposalProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/contentassist/.NLSDslProposalProvider.xtendbin
index f3cfd3f..f707ca6 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/contentassist/.NLSDslProposalProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/contentassist/.NLSDslProposalProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/edit/.StringReplacementHandler.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/edit/.StringReplacementHandler.xtendbin
index 7edfd29..bac7d37 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/edit/.StringReplacementHandler.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/edit/.StringReplacementHandler.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingCalculator.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingCalculator.xtendbin
index e2708ab..3340bc4 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingCalculator.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingCalculator.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingConfiguration.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingConfiguration.xtendbin
index bf45beb..46ea324 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingConfiguration.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.NLSHighlightingConfiguration.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.TokenToAttributeIdMapper.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.TokenToAttributeIdMapper.xtendbin
index b393cdb..f6bcef7 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.TokenToAttributeIdMapper.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/highlighting/.TokenToAttributeIdMapper.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslDescriptionLabelProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslDescriptionLabelProvider.xtendbin
index a1d9031..c993e08 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslDescriptionLabelProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslDescriptionLabelProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslLabelProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslLabelProvider.xtendbin
index 8953f69..16baaf0 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslLabelProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/labeling/.NLSDslLabelProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/outline/.NLSDslOutlineTreeProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/outline/.NLSDslOutlineTreeProvider.xtendbin
index 3b0206a..ffa02d1 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/outline/.NLSDslOutlineTreeProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/outline/.NLSDslOutlineTreeProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/quickfix/.NLSDslQuickfixProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/quickfix/.NLSDslQuickfixProvider.xtendbin
index 1305a29..248fd49 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/quickfix/.NLSDslQuickfixProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n.ui/xtend-gen/org/eclipse/fx/ide/l10n/ui/quickfix/.NLSDslQuickfixProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.l10n/META-INF/MANIFEST.MF
index 386e5f0..e60bb1c 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.l10n

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.l10n; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/pom.xml b/bundles/tooling/org.eclipse.fx.ide.l10n/pom.xml
index 973a31a..5d199b1 100755
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/formatting/.NLSDslFormatter.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/formatting/.NLSDslFormatter.xtendbin
index bb6b96f..876ccd2 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/formatting/.NLSDslFormatter.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/formatting/.NLSDslFormatter.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/generator/.NLSDslGenerator.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/generator/.NLSDslGenerator.xtendbin
index bf4599b..fd20ab6 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/generator/.NLSDslGenerator.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/generator/.NLSDslGenerator.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/scoping/.NLSDslScopeProvider.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/scoping/.NLSDslScopeProvider.xtendbin
index 43a7008..497ba62 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/scoping/.NLSDslScopeProvider.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/scoping/.NLSDslScopeProvider.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/validation/.NLSDslValidator.xtendbin b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/validation/.NLSDslValidator.xtendbin
index aa9b99b..e273a52 100644
--- a/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/validation/.NLSDslValidator.xtendbin
+++ b/bundles/tooling/org.eclipse.fx.ide.l10n/xtend-gen/org/eclipse/fx/ide/l10n/validation/.NLSDslValidator.xtendbin
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.model/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.model/META-INF/MANIFEST.MF
index d81d5b9..dfceb43 100755
--- a/bundles/tooling/org.eclipse.fx.ide.model/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.model/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Model
 Bundle-SymbolicName: org.eclipse.fx.ide.model;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.model.FXPlugin
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.jdt.core;bundle-version="3.7.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.model/pom.xml b/bundles/tooling/org.eclipse.fx.ide.model/pom.xml
index 066f5fc..c7a5e14 100755
--- a/bundles/tooling/org.eclipse.fx.ide.model/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.model/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.core/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.core/META-INF/MANIFEST.MF
index 04c306e..79d5c52 100644
--- a/bundles/tooling/org.eclipse.fx.ide.pde.core/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Core
 Bundle-SymbolicName: org.eclipse.fx.ide.pde.core;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.7.0",
  org.eclipse.core.resources;bundle-version="3.9.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.core/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.core/pom.xml
index 4a1bcb5..2ff9034 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.core/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.core/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.java7/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.java7/META-INF/MANIFEST.MF
index 553eb26..1b843cd 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.java7/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.java7/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: Java7

 Bundle-SymbolicName: org.eclipse.fx.ide.pde.java7;singleton:=true

-Bundle-Version: 2.3.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.7.0",

  org.eclipse.jdt.core;bundle-version="3.7.0",

diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.java7/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.java7/pom.xml
index 5f17884..1ab5950 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.java7/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.java7/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.3.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/META-INF/MANIFEST.MF
index 0277c17..86cdc14 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: E4 PDE
 Bundle-SymbolicName: org.eclipse.fx.ide.pde.ui.e4;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.pde.ui.e4.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/pom.xml
index d0d7b25..4729bf2 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.ui.e4/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.ui/META-INF/MANIFEST.MF
index 9aab9db..bf3dbd9 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ide.pde.ui;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.pde.ui;bundle-version="3.6.100",
  org.eclipse.jface;bundle-version="3.7.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.ui/pom.xml
index 3a32bad..8a1345b 100755
--- a/bundles/tooling/org.eclipse.fx.ide.pde.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.tests/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.tests/META-INF/MANIFEST.MF
index fe554b4..6a73e68 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.tests/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.fx.ide.rrobot.dsl.tests
 Bundle-Vendor: Eclipse.org
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-SymbolicName: org.eclipse.fx.ide.rrobot.dsl.tests; singleton:=true
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.fx.ide.rrobot.dsl;bundle-version="2.3.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/META-INF/MANIFEST.MF
index ef30c21..9082371 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: RRobot UI

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.rrobot.dsl.ui;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.fx.ide.rrobot.dsl;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/pom.xml
index 1d0d858..d69ad08 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/META-INF/MANIFEST.MF
index 77ccc8d..4a21f3c 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: org.eclipse.fx.ide.rrobot.dsl

 Bundle-Vendor: Eclipse.org

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-SymbolicName: org.eclipse.fx.ide.rrobot.dsl;singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: org.eclipse.xtext;visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/pom.xml b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/pom.xml
index 87c4fa3..be8075a 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.dsl/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.model/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.rrobot.model/META-INF/MANIFEST.MF
index 817206f..006a8c4 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.model/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.model/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.fx.ide.rrobot.model;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot.model/pom.xml b/bundles/tooling/org.eclipse.fx.ide.rrobot.model/pom.xml
index fb0fea8..e0c539d 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot.model/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot.model/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.rrobot/META-INF/MANIFEST.MF
index 9fef9a1..afd9516 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: Rrobot

 Bundle-SymbolicName: org.eclipse.fx.ide.rrobot

-Bundle-Version: 2.4.0.qualifier

+Bundle-Version: 3.0.0.qualifier

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

 Require-Bundle: org.eclipse.equinox.common;bundle-version="3.6.0",

  org.eclipse.fx.ide.rrobot.model;bundle-version="2.3.0";visibility:=reexport,

diff --git a/bundles/tooling/org.eclipse.fx.ide.rrobot/pom.xml b/bundles/tooling/org.eclipse.fx.ide.rrobot/pom.xml
index 4ace3f2..7e60b20 100755
--- a/bundles/tooling/org.eclipse.fx.ide.rrobot/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.rrobot/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/META-INF/MANIFEST.MF
index 79a8786..6b8d063 100644
--- a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Device
 Bundle-SymbolicName: org.eclipse.fx.ide.ui.mobile.sim.device
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.fx.ide.ui.mobile.sim.device;x-internal:=true,
  org.eclipse.fx.ide.ui.mobile.sim.device.android.galaxyNote2;x-internal:=true,
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/pom.xml b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/pom.xml
index fe92bbd..e248251 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.device/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/META-INF/MANIFEST.MF
index 7652f15..cf6d95a 100644
--- a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Launch
 Bundle-SymbolicName: org.eclipse.fx.ide.ui.mobile.sim.launch;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.jdt.core;bundle-version="3.8.0",
  org.eclipse.core.runtime;bundle-version="3.8.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/pom.xml b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/pom.xml
index 27d5ce9..54e9540 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.mobile.sim.launch/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.preview/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.ui.preview/META-INF/MANIFEST.MF
index d7e7523..3086e92 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui.preview/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.preview/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ide.ui.preview;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.ui.preview.bundle.Activator
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui;bundle-version="3.7.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui.preview/pom.xml b/bundles/tooling/org.eclipse.fx.ide.ui.preview/pom.xml
index 659ade2..80e7d97 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui.preview/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.ui.preview/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.ui/META-INF/MANIFEST.MF
index ef01485..933828a 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.fx.ide.ui;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Activator: org.eclipse.fx.ide.ui.Activator
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.databinding;bundle-version="1.4.0",
diff --git a/bundles/tooling/org.eclipse.fx.ide.ui/about.properties b/bundles/tooling/org.eclipse.fx.ide.ui/about.properties
index c511df4..0cae211 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui/about.properties
+++ b/bundles/tooling/org.eclipse.fx.ide.ui/about.properties
@@ -6,7 +6,7 @@
 

 blurb=e(fx)clipse\n\

 \n\

-e(fx)clipse is an Eclipse plugin to author JavaFX 2.0 application\n\

+e(fx)clipse is an Eclipse plugin to author JavaFX 8.0 application\n\

 Visit http://efxclipse.org/ and http://www.bestsolution.at\n\

 \n\

 Copyright (c) 2011-2012 BestSolution.at Systemhaus GmbH. All rights reserved.\n\

diff --git a/bundles/tooling/org.eclipse.fx.ide.ui/pom.xml b/bundles/tooling/org.eclipse.fx.ide.ui/pom.xml
index f770c14..d3e0e12 100755
--- a/bundles/tooling/org.eclipse.fx.ide.ui/pom.xml
+++ b/bundles/tooling/org.eclipse.fx.ide.ui/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
-		<version>2.4.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<build>
diff --git a/releng/code/org.eclipse.fx.code.base.feature/feature.xml b/releng/code/org.eclipse.fx.code.base.feature/feature.xml
index b8286ab..8839d04 100644
--- a/releng/code/org.eclipse.fx.code.base.feature/feature.xml
+++ b/releng/code/org.eclipse.fx.code.base.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.code.base.feature"
       label="e(fx)clipse - Code Editing - Basic"
-      version="2.6.0.qualifier">
+      version="3.0.0.qualifier">
 
    <description url="http://www.example.com/description">
       [Enter Feature Description here.]
diff --git a/releng/code/org.eclipse.fx.code.base.feature/pom.xml b/releng/code/org.eclipse.fx.code.base.feature/pom.xml
index 05fe6e1..656c8a4 100644
--- a/releng/code/org.eclipse.fx.code.base.feature/pom.xml
+++ b/releng/code/org.eclipse.fx.code.base.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/code/org.eclipse.fx.code.langs.feature/.gitignore b/releng/code/org.eclipse.fx.code.langs.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/releng/code/org.eclipse.fx.code.langs.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/releng/code/org.eclipse.fx.code.langs.feature/feature.xml b/releng/code/org.eclipse.fx.code.langs.feature/feature.xml
index e414bb5..5b22628 100644
--- a/releng/code/org.eclipse.fx.code.langs.feature/feature.xml
+++ b/releng/code/org.eclipse.fx.code.langs.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.code.langs.feature"
       label="e(fx)clipse - Code Editing - Default Language Support"
-      version="2.6.0.qualifier">
+      version="3.0.0.qualifier">
 
    <description url="http://www.example.com/description">
       [Enter Feature Description here.]
diff --git a/releng/code/org.eclipse.fx.code.langs.feature/pom.xml b/releng/code/org.eclipse.fx.code.langs.feature/pom.xml
index dd76ff4..b633c44 100644
--- a/releng/code/org.eclipse.fx.code.langs.feature/pom.xml
+++ b/releng/code/org.eclipse.fx.code.langs.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/code/org.eclipse.fx.code.langs.feature/target/feature.xml b/releng/code/org.eclipse.fx.code.langs.feature/target/feature.xml
deleted file mode 100644
index e439f43..0000000
--- a/releng/code/org.eclipse.fx.code.langs.feature/target/feature.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.fx.code.langs.feature"
-      label="e(fx)clipse - Code Editing - Default Language Support"
-      version="2.5.0.201608211840">
-
-   <description url="http://www.example.com/description">
-      [Enter Feature Description here.]
-   </description>
-
-   <copyright url="http://www.example.com/copyright">
-      [Enter Copyright Description here.]
-   </copyright>
-
-   <license url="http://www.example.com/license">
-      [Enter License Description here.]
-   </license>
-
-   <plugin
-         id="org.eclipse.fx.code.editor.fx.themes"
-         download-size="6"
-         install-size="9"
-         version="2.5.0.201608211840"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.fx.code.editor.langs"
-         download-size="52"
-         install-size="194"
-         version="2.5.0.201608211840"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.fx.code.editor.langs.contrib"
-         download-size="7"
-         install-size="13"
-         version="2.5.0.201608211840"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.fx.code.editor.langs.themes"
-         download-size="3"
-         install-size="5"
-         version="2.5.0.201608211840"
-         unpack="false"/>
-
-</feature>
diff --git a/releng/code/org.eclipse.fx.code.target.feature/feature.xml b/releng/code/org.eclipse.fx.code.target.feature/feature.xml
index 29ee84e..0a81660 100644
--- a/releng/code/org.eclipse.fx.code.target.feature/feature.xml
+++ b/releng/code/org.eclipse.fx.code.target.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.code.target.feature"
       label="Code editing target platform"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/code/org.eclipse.fx.code.target.feature/pom.xml b/releng/code/org.eclipse.fx.code.target.feature/pom.xml
index 1c4b50b..ebcda1f 100644
--- a/releng/code/org.eclipse.fx.code.target.feature/pom.xml
+++ b/releng/code/org.eclipse.fx.code.target.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/org.eclipse.fx.core.shared.updatesite/pom.xml b/releng/org.eclipse.fx.core.shared.updatesite/pom.xml
index 90ab004..59f6689 100644
--- a/releng/org.eclipse.fx.core.shared.updatesite/pom.xml
+++ b/releng/org.eclipse.fx.core.shared.updatesite/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../org.eclipse.fx.shared.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 	<properties>

diff --git a/releng/org.eclipse.fx.core.shared.updatesite/site.xml b/releng/org.eclipse.fx.core.shared.updatesite/site.xml
index 266bb58..f399e6e 100644
--- a/releng/org.eclipse.fx.core.shared.updatesite/site.xml
+++ b/releng/org.eclipse.fx.core.shared.updatesite/site.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/org.eclipse.fx.core.shared.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.core.shared.feature" version="2.6.0.qualifier"/>
-   <feature url="features/org.eclipse.fx.runtime.min.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.runtime.min.feature" version="2.6.0.qualifier"/>
+   <feature url="features/org.eclipse.fx.core.shared.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.core.shared.feature" version="3.0.0.qualifier"/>
+   <feature url="features/org.eclipse.fx.runtime.min.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.runtime.min.feature" version="3.0.0.qualifier"/>
 </site>
diff --git a/releng/org.eclipse.fx.ide.releng/pom.xml b/releng/org.eclipse.fx.ide.releng/pom.xml
index ddd535f..b4221a0 100755
--- a/releng/org.eclipse.fx.ide.releng/pom.xml
+++ b/releng/org.eclipse.fx.ide.releng/pom.xml
@@ -11,7 +11,7 @@
 
 	<groupId>org.eclipse.fx.ide</groupId>
 	<artifactId>releng</artifactId>
-	<version>2.4.0-SNAPSHOT</version>
+	<version>3.0.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<properties>
 		<tycho-version>0.22.0</tycho-version>
diff --git a/releng/org.eclipse.fx.ide.updatesite/pom.xml b/releng/org.eclipse.fx.ide.updatesite/pom.xml
index 1345fa8..495b144 100644
--- a/releng/org.eclipse.fx.ide.updatesite/pom.xml
+++ b/releng/org.eclipse.fx.ide.updatesite/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 	<build>

diff --git a/releng/org.eclipse.fx.releng/pom.xml b/releng/org.eclipse.fx.releng/pom.xml
index dc4b7cd..6a0fb03 100755
--- a/releng/org.eclipse.fx.releng/pom.xml
+++ b/releng/org.eclipse.fx.releng/pom.xml
@@ -11,18 +11,18 @@
 
 	<groupId>org.eclipse.fx</groupId>
 	<artifactId>releng</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>3.0.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<properties>
-		<tycho-version>0.23.1</tycho-version>
-		<tycho-extras.version>0.23.1</tycho-extras.version>
+		<tycho-version>0.25.0</tycho-version>
+		<tycho-extras.version>0.25.0</tycho-extras.version>
 		<cbi-plugins.version>1.1.3</cbi-plugins.version>
 		<junit-version>4.8.1</junit-version>
 		<mockito-version>1.8.4</mockito-version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<platform-version>[3.7,3.8)</platform-version>
-		<efx_shared_runtime>http://download.eclipse.org/efxclipse/runtime-shared-nightly-2.6.x/site/</efx_shared_runtime>
-		<download-publish-path>/home/data/httpd/download.eclipse.org/efxclipse/runtime-nightly-2.6.x</download-publish-path>
+		<efx_shared_runtime>http://download.eclipse.org/efxclipse/runtime-shared-nightly/site/</efx_shared_runtime>
+		<download-publish-path>/home/data/httpd/download.eclipse.org/efxclipse/runtime-nightly</download-publish-path>
 		<eclipse-repo.url>https://repo.eclipse.org/content/repositories/releases/</eclipse-repo.url>
 		<tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/efxclipse/org.eclipse.efxclipse.git</tycho.scmUrl>
 	</properties>
@@ -113,9 +113,9 @@
 
 	<repositories>
 		<repository>
-			<id>mars</id>
+			<id>neon</id>
 			<layout>p2</layout>
-			<url>http://download.eclipse.org/eclipse/updates/4.5/R-4.5.1-201509040015</url>
+			<url>http://download.eclipse.org/eclipse/updates/4.6/R-4.6-201606061100/</url>
 		</repository>
 		<repository>
 			<id>orbit</id>
diff --git a/releng/org.eclipse.fx.runtime.doc/META-INF/MANIFEST.MF b/releng/org.eclipse.fx.runtime.doc/META-INF/MANIFEST.MF
index e21a16a..ca19dd4 100644
--- a/releng/org.eclipse.fx.runtime.doc/META-INF/MANIFEST.MF
+++ b/releng/org.eclipse.fx.runtime.doc/META-INF/MANIFEST.MF
@@ -2,5 +2,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Doc
 Bundle-SymbolicName: org.eclipse.fx.runtime.doc
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/releng/org.eclipse.fx.runtime.doc/pom.xml b/releng/org.eclipse.fx.runtime.doc/pom.xml
index 421f709..048a02c 100755
--- a/releng/org.eclipse.fx.runtime.doc/pom.xml
+++ b/releng/org.eclipse.fx.runtime.doc/pom.xml
@@ -10,14 +10,14 @@
 		<groupId>org.eclipse.fx</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../org.eclipse.fx.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>org.eclipse.fx.runtime</groupId>
 			<artifactId>org.eclipse.fx.runtime.feature</artifactId>
-			<version>2.6.0-SNAPSHOT</version>
+			<version>3.0.0-SNAPSHOT</version>
 		</dependency>
 	</dependencies>
 
diff --git a/releng/org.eclipse.fx.shared.doc/META-INF/MANIFEST.MF b/releng/org.eclipse.fx.shared.doc/META-INF/MANIFEST.MF
index 00ae3c6..1676e80 100644
--- a/releng/org.eclipse.fx.shared.doc/META-INF/MANIFEST.MF
+++ b/releng/org.eclipse.fx.shared.doc/META-INF/MANIFEST.MF
@@ -2,5 +2,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Doc
 Bundle-SymbolicName: org.eclipse.fx.shared.doc
-Bundle-Version: 2.6.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/releng/org.eclipse.fx.shared.doc/pom.xml b/releng/org.eclipse.fx.shared.doc/pom.xml
index 0b8bf77..3e16f8a 100755
--- a/releng/org.eclipse.fx.shared.doc/pom.xml
+++ b/releng/org.eclipse.fx.shared.doc/pom.xml
@@ -10,14 +10,14 @@
 		<groupId>org.eclipse.fx.shared</groupId>
 		<artifactId>releng</artifactId>
 		<relativePath>../org.eclipse.fx.shared.releng/pom.xml</relativePath>
-		<version>2.6.0-SNAPSHOT</version>
+		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>org.eclipse.fx.shared</groupId>
 			<artifactId>org.eclipse.fx.core.shared.feature</artifactId>
-			<version>2.6.0-SNAPSHOT</version>
+			<version>3.0.0-SNAPSHOT</version>
 		</dependency>
 	</dependencies>
 
diff --git a/releng/org.eclipse.fx.shared.releng/pom.xml b/releng/org.eclipse.fx.shared.releng/pom.xml
index 55c9512..79be4ce 100755
--- a/releng/org.eclipse.fx.shared.releng/pom.xml
+++ b/releng/org.eclipse.fx.shared.releng/pom.xml
@@ -11,9 +11,10 @@
 
 	<groupId>org.eclipse.fx.shared</groupId>
 	<artifactId>releng</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>3.0.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<properties>
+		<!-- KEEP VERSION 0.22.0 other one will fail on hudson -->
 		<tycho-version>0.22.0</tycho-version>
 		<tycho-extras.version>0.22.0</tycho-extras.version>
 		<cbi-plugins.version>1.1.3</cbi-plugins.version>
@@ -21,7 +22,7 @@
 		<mockito-version>1.8.4</mockito-version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<platform-version>[3.7,3.8)</platform-version>
-		<download-publish-path>/home/data/httpd/download.eclipse.org/efxclipse/runtime-shared-nightly-2.6.x</download-publish-path>
+		<download-publish-path>/home/data/httpd/download.eclipse.org/efxclipse/runtime-shared-nightly</download-publish-path>
 		<eclipse-repo.url>https://repo.eclipse.org/content/repositories/releases/</eclipse-repo.url>
 		<tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/efxclipse/org.eclipse.efxclipse.git</tycho.scmUrl>
 	</properties>
diff --git a/releng/org.eclipse.fx.updatesite/pom.xml b/releng/org.eclipse.fx.updatesite/pom.xml
index 3e8f7b1..64b4484 100644
--- a/releng/org.eclipse.fx.updatesite/pom.xml
+++ b/releng/org.eclipse.fx.updatesite/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 	<properties>

diff --git a/releng/org.eclipse.fx.updatesite/site.xml b/releng/org.eclipse.fx.updatesite/site.xml
index 027ebdd..14c81e5 100644
--- a/releng/org.eclipse.fx.updatesite/site.xml
+++ b/releng/org.eclipse.fx.updatesite/site.xml
@@ -1,27 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/org.eclipse.fx.core.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.core.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.core.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.core.feature" version="3.0.0.qualifier">
       <category name="fxruntime"/>
    </feature>
-   <feature url="features/org.eclipse.fx.target.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.target.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.target.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.target.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
-   <feature url="features/org.eclipse.fx.target.rcp.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.target.rcp.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.target.rcp.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.target.rcp.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
-   <feature url="features/org.eclipse.fx.runtime.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.runtime.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.runtime.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.runtime.feature" version="3.0.0.qualifier">
       <category name="fxruntime"/>
    </feature>
-   <feature url="features/org.eclipse.fx.target.rcp4.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.target.rcp4.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.target.rcp4.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.target.rcp4.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
-   <feature url="features/org.eclipse.fx.runtime.min.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.runtime.min.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.runtime.min.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.runtime.min.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
-   <feature url="features/org.eclipse.fx.code.target.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.code.target.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.code.target.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.code.target.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
-   <feature url="features/org.eclipse.fx.slf4j.target.feature_2.6.0.qualifier.jar" id="org.eclipse.fx.slf4j.target.feature" version="2.6.0.qualifier">
+   <feature url="features/org.eclipse.fx.slf4j.target.feature_3.0.0.qualifier.jar" id="org.eclipse.fx.slf4j.target.feature" version="3.0.0.qualifier">
       <category name="fxtarget"/>
    </feature>
    <category-def name="fxruntime" label="FX Runtime"/>
diff --git a/releng/runtime/org.eclipse.fx..slf4j.target.feature/feature.xml b/releng/runtime/org.eclipse.fx..slf4j.target.feature/feature.xml
index 6c1f833..4594111 100644
--- a/releng/runtime/org.eclipse.fx..slf4j.target.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx..slf4j.target.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.slf4j.target.feature"
       label="Feature"
-      version="2.6.0.qualifier">
+      version="3.0.0.qualifier">
 
    <description url="http://www.example.com/description">
       Feature used to define a target which holds all slf4j providers (Do not install into IDE)
diff --git a/releng/runtime/org.eclipse.fx..slf4j.target.feature/pom.xml b/releng/runtime/org.eclipse.fx..slf4j.target.feature/pom.xml
index 46944d3..5a984ca 100644
--- a/releng/runtime/org.eclipse.fx..slf4j.target.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx..slf4j.target.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.core.feature/feature.xml b/releng/runtime/org.eclipse.fx.core.feature/feature.xml
index c2016cd..2fac2af 100644
--- a/releng/runtime/org.eclipse.fx.core.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.core.feature"
       label="e(fx)clipse core Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.core.feature/pom.xml b/releng/runtime/org.eclipse.fx.core.feature/pom.xml
index affef86..135a812 100644
--- a/releng/runtime/org.eclipse.fx.core.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.core.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.core.shared.feature/feature.xml b/releng/runtime/org.eclipse.fx.core.shared.feature/feature.xml
index fd53b14..04f2efb 100644
--- a/releng/runtime/org.eclipse.fx.core.shared.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.core.shared.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.core.shared.feature"
       label="Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.core.shared.feature/pom.xml b/releng/runtime/org.eclipse.fx.core.shared.feature/pom.xml
index 4e03dee..79cccfa 100644
--- a/releng/runtime/org.eclipse.fx.core.shared.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.core.shared.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.shared.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/feature.xml b/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/feature.xml
index b32b036..10af5c9 100644
--- a/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.runtime.e4fx.feature"
       label="minimal e4 application framework feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description url="http://www.example.com/description">
diff --git a/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/pom.xml b/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/pom.xml
index 9a49731..ec7950b 100644
--- a/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.e4fx.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/feature.xml b/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/feature.xml
index 8c747fb..6705d84 100644
--- a/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.runtime.e4fx.p2.feature"
       label="Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/pom.xml b/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/pom.xml
index d032df3..3780950 100644
--- a/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.e4fx.p2.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.runtime.feature/feature.xml b/releng/runtime/org.eclipse.fx.runtime.feature/feature.xml
index a897246..c529ae0 100644
--- a/releng/runtime/org.eclipse.fx.runtime.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.runtime.feature"
       label="Rutime Bundle Collector Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.runtime.feature/pom.xml b/releng/runtime/org.eclipse.fx.runtime.feature/pom.xml
index eead26c..f8faefe 100644
--- a/releng/runtime/org.eclipse.fx.runtime.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.runtime.min.feature/feature.xml b/releng/runtime/org.eclipse.fx.runtime.min.feature/feature.xml
index a7f9189..4922fd0 100644
--- a/releng/runtime/org.eclipse.fx.runtime.min.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.min.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.runtime.min.feature"
       label="e(fx)clipse - Minimal JavaFX OSGi integration bundles"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.runtime.min.feature/pom.xml b/releng/runtime/org.eclipse.fx.runtime.min.feature/pom.xml
index 1a7dd26..937548a 100644
--- a/releng/runtime/org.eclipse.fx.runtime.min.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.runtime.min.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.shared</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.shared.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.swtfx.feature/feature.xml b/releng/runtime/org.eclipse.fx.swtfx.feature/feature.xml
index fa95a5b..23391e6 100644
--- a/releng/runtime/org.eclipse.fx.swtfx.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.swtfx.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.swtfx.feature"
       label="SWT on JavaFX implementation"
-      version="2.3.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.swtfx.feature/pom.xml b/releng/runtime/org.eclipse.fx.swtfx.feature/pom.xml
index aafd345..de15746 100644
--- a/releng/runtime/org.eclipse.fx.swtfx.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.swtfx.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.experimental</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.experimental.releng/pom.xml</relativePath>

-		<version>2.3.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>

diff --git a/releng/runtime/org.eclipse.fx.target.feature/feature.xml b/releng/runtime/org.eclipse.fx.target.feature/feature.xml
index ae46602..cbbd5e8 100644
--- a/releng/runtime/org.eclipse.fx.target.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.target.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.target.feature"
       label="Target Platform Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
@@ -2075,6 +2075,20 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.xtend.lib.macro"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.xtend.lib.macro.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.xtext.xbase.lib"
          download-size="0"
          install-size="0"
diff --git a/releng/runtime/org.eclipse.fx.target.feature/pom.xml b/releng/runtime/org.eclipse.fx.target.feature/pom.xml
index 0826f2e..3396a28 100644
--- a/releng/runtime/org.eclipse.fx.target.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.target.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.target.rcp.feature/feature.xml b/releng/runtime/org.eclipse.fx.target.rcp.feature/feature.xml
index f3992ec..8fd0e9f 100644
--- a/releng/runtime/org.eclipse.fx.target.rcp.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.target.rcp.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.target.rcp.feature"
       label="RCP 3.x Target Platform Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/runtime/org.eclipse.fx.target.rcp.feature/pom.xml b/releng/runtime/org.eclipse.fx.target.rcp.feature/pom.xml
index c66e184..fae5fce 100644
--- a/releng/runtime/org.eclipse.fx.target.rcp.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.target.rcp.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/runtime/org.eclipse.fx.target.rcp4.feature/feature.xml b/releng/runtime/org.eclipse.fx.target.rcp4.feature/feature.xml
index 8fc3462..0672d42 100644
--- a/releng/runtime/org.eclipse.fx.target.rcp4.feature/feature.xml
+++ b/releng/runtime/org.eclipse.fx.target.rcp4.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.target.rcp4.feature"
       label="RCP e4 Target Platform Feature"
-      version="2.6.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description url="http://www.example.com/description">
diff --git a/releng/runtime/org.eclipse.fx.target.rcp4.feature/pom.xml b/releng/runtime/org.eclipse.fx.target.rcp4.feature/pom.xml
index 21ecde1..eac7ad8 100644
--- a/releng/runtime/org.eclipse.fx.target.rcp4.feature/pom.xml
+++ b/releng/runtime/org.eclipse.fx.target.rcp4.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.releng/pom.xml</relativePath>

-		<version>2.6.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.basic.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.basic.feature/feature.xml
index 6c60173..5fe8e24 100644
--- a/releng/tooling/org.eclipse.fx.ide.basic.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.basic.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.basic.feature"
       label="e(fx)clipse - IDE - Basic"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.basic.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.basic.feature/pom.xml
index 9dbbf44..83f44ce 100644
--- a/releng/tooling/org.eclipse.fx.ide.basic.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.basic.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.converter.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.converter.feature/feature.xml
index 7cff620..ff18413 100644
--- a/releng/tooling/org.eclipse.fx.ide.converter.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.converter.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.converter.feature"
       label="e(fx)clipse - IDE - Converter"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.converter.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.converter.feature/pom.xml
index 69bfcfb..748632b 100644
--- a/releng/tooling/org.eclipse.fx.ide.converter.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.converter.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.css.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.css.feature/feature.xml
index 0678edb..db36c9e 100644
--- a/releng/tooling/org.eclipse.fx.ide.css.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.css.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.css.feature"
       label="e(fx)clipse - IDE - CSS"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org"
       plugin="org.eclipse.fx.ide.ui">
 
diff --git a/releng/tooling/org.eclipse.fx.ide.css.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.css.feature/pom.xml
index bc1a409..1dc1399 100644
--- a/releng/tooling/org.eclipse.fx.ide.css.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.css.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.feature/feature.xml
index dbe984d..802caa4 100644
--- a/releng/tooling/org.eclipse.fx.ide.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.feature"
       label="e(fx)clipse - IDE"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description url="http://www.example.com/description">
diff --git a/releng/tooling/org.eclipse.fx.ide.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.feature/pom.xml
index 20c814d..068feb8 100644
--- a/releng/tooling/org.eclipse.fx.ide.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>

diff --git a/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/feature.xml
index 5647703..847d1bc 100644
--- a/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.fxgraph.feature"
       label="e(fx)clipse - IDE - FXGraph"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/pom.xml
index 49c2b1b..4df89dd 100644
--- a/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.fxgraph.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.fxml.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.fxml.feature/feature.xml
index 8e3085f..6f4ef67 100644
--- a/releng/tooling/org.eclipse.fx.ide.fxml.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.fxml.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.fxml.feature"
       label="e(fx)clipse - IDE - FXML"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.fxml.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.fxml.feature/pom.xml
index e4e6012..1e8c063 100644
--- a/releng/tooling/org.eclipse.fx.ide.fxml.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.fxml.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.gmod.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.gmod.feature/feature.xml
index 05e3939..2c41d40 100644
--- a/releng/tooling/org.eclipse.fx.ide.gmod.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.gmod.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.gmod.feature"
       label="e(fx)clipse - IDE - GModel Feature"
-      version="2.4.0.qualifier">
+      version="3.0.0.qualifier">
 
    <description url="http://www.example.com/description">
       GModel Feature to model generic serialized data
diff --git a/releng/tooling/org.eclipse.fx.ide.gmod.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.gmod.feature/pom.xml
index e2d7d04..1d2831f 100644
--- a/releng/tooling/org.eclipse.fx.ide.gmod.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.gmod.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.l10n.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.l10n.feature/feature.xml
index 46aa2e8..d7bbc50 100644
--- a/releng/tooling/org.eclipse.fx.ide.l10n.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.l10n.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.l10n.feature"
       label="e(fx)clipse - IDE - l10n support"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.l10n.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.l10n.feature/pom.xml
index 52c866f..1a318e3 100644
--- a/releng/tooling/org.eclipse.fx.ide.l10n.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.l10n.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.ldef.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.ldef.feature/feature.xml
index afef82b..7cc5221 100644
--- a/releng/tooling/org.eclipse.fx.ide.ldef.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.ldef.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.ldef.feature"
       label="e(fx)clipse - IDE - DSL to setup JavaFX based code editors"
-      version="2.4.0.qualifier">
+      version="3.0.0.qualifier">
 
    <description>
       DSL to create code editors
diff --git a/releng/tooling/org.eclipse.fx.ide.ldef.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.ldef.feature/pom.xml
index 6644079..ef7776d 100644
--- a/releng/tooling/org.eclipse.fx.ide.ldef.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.ldef.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.mobile.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.mobile.feature/feature.xml
index 3d086ca..162f060 100644
--- a/releng/tooling/org.eclipse.fx.ide.mobile.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.mobile.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.mobile.feature"
       label="e(fx)clipse - IDE - Mobile"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.mobile.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.mobile.feature/pom.xml
index ff79cd3..aaa5694 100644
--- a/releng/tooling/org.eclipse.fx.ide.mobile.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.mobile.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.pde.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.pde.feature/feature.xml
index dd18abe..e0781e6 100644
--- a/releng/tooling/org.eclipse.fx.ide.pde.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.pde.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.pde.feature"
       label="e(fx)clipse - IDE - PDE"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.pde.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.pde.feature/pom.xml
index 28e2ba6..2fef6cc 100644
--- a/releng/tooling/org.eclipse.fx.ide.pde.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.pde.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/releng/tooling/org.eclipse.fx.ide.rrobot.feature/feature.xml b/releng/tooling/org.eclipse.fx.ide.rrobot.feature/feature.xml
index 3e1945b..3abdc3a 100644
--- a/releng/tooling/org.eclipse.fx.ide.rrobot.feature/feature.xml
+++ b/releng/tooling/org.eclipse.fx.ide.rrobot.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.fx.ide.rrobot.feature"
       label="e(fx)clipse - IDE - RRobot"
-      version="2.4.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
diff --git a/releng/tooling/org.eclipse.fx.ide.rrobot.feature/pom.xml b/releng/tooling/org.eclipse.fx.ide.rrobot.feature/pom.xml
index f78e9cf..c61e6a8 100644
--- a/releng/tooling/org.eclipse.fx.ide.rrobot.feature/pom.xml
+++ b/releng/tooling/org.eclipse.fx.ide.rrobot.feature/pom.xml
@@ -10,7 +10,7 @@
 		<groupId>org.eclipse.fx.ide</groupId>

 		<artifactId>releng</artifactId>

 		<relativePath>../../org.eclipse.fx.ide.releng/pom.xml</relativePath>

-		<version>2.4.0-SNAPSHOT</version>

+		<version>3.0.0-SNAPSHOT</version>

 	</parent>

 

 </project>
\ No newline at end of file
diff --git a/testcases/sample.splash.app.feature/.gitignore b/testcases/sample.splash.app.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/testcases/sample.splash.app.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/testcases/sample.splash.app.feature/.project b/testcases/sample.splash.app.feature/.project
new file mode 100644
index 0000000..9a52b05
--- /dev/null
+++ b/testcases/sample.splash.app.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>sample.splash.app.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testcases/sample.splash.app.feature/build.properties b/testcases/sample.splash.app.feature/build.properties
new file mode 100644
index 0000000..b045d39
--- /dev/null
+++ b/testcases/sample.splash.app.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
\ No newline at end of file
diff --git a/testcases/sample.splash.app.feature/feature.xml b/testcases/sample.splash.app.feature/feature.xml
new file mode 100644
index 0000000..198526f
--- /dev/null
+++ b/testcases/sample.splash.app.feature/feature.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+	id="sample.splash.app.feature"
+	label="Sample Splash Application Feature"
+	version="1.0.0.qualifier"
+	provider-name="${BundleProject_bundleVendor}"
+	>
+		<description url="http://www.efxclipse.org">
+			TODO FILL WITH CONTENT
+		</description>
+
+		<copyright url="http://www.efxclipse.org">
+			TODO FILL WITH CONTENT
+		</copyright>
+
+		<license url="http://www.efxclipse.org">
+			TODO FILL WITH CONTENT
+		</license>
+
+   		<plugin id="sample.splash.app" install-size="0" version="0.0.0" unpack="false" />
+
+
+</feature>
diff --git a/testcases/sample.splash.app.feature/pom.xml b/testcases/sample.splash.app.feature/pom.xml
new file mode 100644
index 0000000..0324973
--- /dev/null
+++ b/testcases/sample.splash.app.feature/pom.xml
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<name>Sample Splash - application feature</name>
+	<groupId>sample.splash</groupId>
+	<artifactId>sample.splash.app.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+
+	<parent>
+		<groupId>sample.splash</groupId>
+		<artifactId>sample.splash.app.releng</artifactId>
+		<relativePath>../sample.splash.app.releng/pom.xml</relativePath>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+
+</project>
\ No newline at end of file
diff --git a/testcases/sample.splash.app.product/.gitignore b/testcases/sample.splash.app.product/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/testcases/sample.splash.app.product/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/testcases/sample.splash.app.product/.project b/testcases/sample.splash.app.product/.project
new file mode 100644
index 0000000..b0e42e8
--- /dev/null
+++ b/testcases/sample.splash.app.product/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>sample.splash.app.product</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/testcases/sample.splash.app.product/pom.xml b/testcases/sample.splash.app.product/pom.xml
new file mode 100644
index 0000000..e557b95
--- /dev/null
+++ b/testcases/sample.splash.app.product/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<name>Sample Splash - application product</name>
+	<groupId>sample.splash</groupId>
+	<artifactId>sample.splash.app.product</artifactId>
+	<packaging>eclipse-repository</packaging>
+
+	<parent>
+		<groupId>sample.splash</groupId>
+		<artifactId>sample.splash.app.releng</artifactId>
+		<relativePath>../sample.splash.app.releng/pom.xml</relativePath>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+	
+	<build>
+  	<plugins>
+    	<plugin>
+      		<groupId>org.eclipse.tycho</groupId>
+      		<artifactId>tycho-p2-director-plugin</artifactId>
+      		<version>${tycho-version}</version>
+      		<executions>
+        		<execution>
+          			<id>materialize-products</id>
+          			<goals>
+            			<goal>materialize-products</goal>
+          			</goals>
+        		</execution>
+        		<execution>
+          			<id>archive-products</id>
+          			<goals>
+            			<goal>archive-products</goal>
+          			</goals>
+        		</execution>
+      		</executions>
+    	</plugin>
+	</plugins>
+	</build>
+</project>
\ No newline at end of file
diff --git a/testcases/sample.splash.app.product/sample.splash.app.product.product b/testcases/sample.splash.app.product/sample.splash.app.product.product
new file mode 100644
index 0000000..36ae898
--- /dev/null
+++ b/testcases/sample.splash.app.product/sample.splash.app.product.product
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="Sample Splash" uid="sample.splash.app.product" id="sample.splash.app.product" application="org.eclipse.fx.ui.workbench.fx.main-thread-application" version="1.0.0" useFeatures="true" includeLaunchers="true">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgsMac>-vm /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java
+      </programArgsMac>
+      <vmArgs>-Dorg.osgi.framework.bundle.parent=ext
+      </vmArgs>
+   </launcherArgs>
+
+   <windowImages/>
+
+   <splash
+      location="sample.splash.app" />
+   <launcher>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="sample.splash.app.feature"/>
+      <feature id="org.eclipse.fx.runtime.e4fx.feature"/>
+      <feature id="org.eclipse.equinox.executable" version="3.6.200.v20150602-1417"/>
+   </features>
+
+   <configurations>
+      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
+      <plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+   </configurations>
+
+</product>
diff --git a/testcases/sample.splash.app.product/sample.splash.app.product.product-osx.launch b/testcases/sample.splash.app.product/sample.splash.app.product.product-osx.launch
new file mode 100644
index 0000000..dfa6107
--- /dev/null
+++ b/testcases/sample.splash.app.product/sample.splash.app.product.product-osx.launch
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/sample.splash.app.product.product-osx"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-sample.splash.app.product"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.pde.ui.launcher.PDESourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;sourceLookupDirector&gt;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;archive detectRoot=&amp;quot;true&amp;quot; path=&amp;quot;/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/javafx-src.zip&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.externalArchive&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;default/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#10;&lt;/sourceContainers&gt;&#10;&lt;/sourceLookupDirector&gt;&#10;"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.osgi.framework.bundle.parent=ext -XstartOnFirstThread"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="sample.splash.app.product"/>
+<stringAttribute key="productFile" value="/sample.splash.app.product/sample.splash.app.product.product"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.fx.runtime.e4fx.feature:default"/>
+<setEntry value="sample.splash.app.feature:default"/>
+</setAttribute>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="true"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/testcases/sample.splash.app.product/sample.splash.app.product.product.launch b/testcases/sample.splash.app.product/sample.splash.app.product.product.launch
new file mode 100644
index 0000000..7a8a11e
--- /dev/null
+++ b/testcases/sample.splash.app.product/sample.splash.app.product.product.launch
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/sample.splash.app.product.product"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-sample.splash.app.product"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.osgi.framework.bundle.parent=ext -XstartOnFirstThread"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="sample.splash.app.product"/>
+<stringAttribute key="productFile" value="/sample.splash.app.product/sample.splash.app.product.product"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.fx.runtime.e4fx.feature:default"/>
+<setEntry value="sample.splash.app.feature:default"/>
+</setAttribute>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="true"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/testcases/sample.splash.app.releng/.project b/testcases/sample.splash.app.releng/.project
new file mode 100644
index 0000000..e5c7bf4
--- /dev/null
+++ b/testcases/sample.splash.app.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>sample.splash.app.releng</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/testcases/sample.splash.app.releng/build.xml b/testcases/sample.splash.app.releng/build.xml
new file mode 100644
index 0000000..96e504fd
--- /dev/null
+++ b/testcases/sample.splash.app.releng/build.xml
@@ -0,0 +1,53 @@
+<project name="native-build" default="do-deploy" basedir="."  xmlns:fx="javafx:com.sun.javafx.tools.ant">
+	<property name="eclipse-app-dir" value="../sample.splash.app.product/target/products/sample.splash.app.product/noenv/noenv/noenv" />
+
+	<target name="init-fx-tasks">
+		<taskdef name="fxosgilauncher" classpath="org.eclipse.fx.ide.ant.jar" classname="org.eclipse.fx.ide.ant.FXOsgiLaunchTask" />
+		<path id="fxant">
+			<filelist>
+				<file name="${java.home}\..\lib\ant-javafx.jar"/>
+				<file name="${java.home}\lib\ant-jfxrt.jar"/>
+			</filelist>
+		</path>
+		<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
+					uri="javafx:com.sun.javafx.tools.ant"
+					classpathref="fxant"/>
+	</target>
+
+	<target name="do-deploy" depends="init-fx-tasks">
+		<fileset id="equinox-launcher" dir="../sample.splash.app.product/target/products/sample.splash.app.product/noenv/noenv/noenv">
+			<filename name="plugins/org.eclipse.equinox.launcher_*.jar"/>
+		</fileset>
+		<fxosgilauncher classpathref="fxant" equinoxlauncherjarref="equinox-launcher"/>
+
+		<fx:resources id="appRes">
+			<fx:fileset dir="." includes="fx-osgi-launch.jar"/>
+			<fx:fileset dir="${eclipse-app-dir}" includes="**/*"/>
+		</fx:resources>
+
+		<fx:application id="fxApplication"
+								name="Sample Splash"
+								mainClass="org.eclipse.equinox.launcher.Main"
+								toolkit="swing"
+
+							/>
+
+		<fx:deploy
+			embedJNLP="false"
+			extension="false"
+			includeDT="false"
+			offlineAllowed="true"
+			outdir="${basedir}/deploy"
+			outfile="fix-ide"
+			nativeBundles="all"
+			updatemode="background"
+			>
+			<fx:platform basedir="${java.home}">
+				<fx:property name="org.osgi.framework.bundle.parent" value="ext"/>
+			</fx:platform>
+			<fx:info title="Sample Splash" vendor=""/>
+			<fx:application refid="fxApplication"/>
+			<fx:resources refid="appRes"/>
+		</fx:deploy>
+	</target>
+</project>
\ No newline at end of file
diff --git a/testcases/sample.splash.app.releng/org.eclipse.fx.ide.ant.jar b/testcases/sample.splash.app.releng/org.eclipse.fx.ide.ant.jar
new file mode 100644
index 0000000..9ac8c22
--- /dev/null
+++ b/testcases/sample.splash.app.releng/org.eclipse.fx.ide.ant.jar
Binary files differ
diff --git a/testcases/sample.splash.app.releng/pom.xml b/testcases/sample.splash.app.releng/pom.xml
new file mode 100644
index 0000000..2ce2feb
--- /dev/null
+++ b/testcases/sample.splash.app.releng/pom.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<name>Sample Splash - releng</name>
+
+	<prerequisites>
+		<maven>3.0</maven>
+	</prerequisites>
+
+	<groupId>sample.splash</groupId>
+	<artifactId>sample.splash.app.releng</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+	<properties>
+		<tycho-version>0.25.0</tycho-version>
+		<junit-version>4.11</junit-version>
+		<mockito-version>1.8.4</mockito-version>
+		<platform-version>4.2</platform-version>
+		<efx-version>1.0.0</efx-version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<modules>
+		<module>../sample.splash.app</module>
+		<module>../sample.splash.app.feature</module>
+		<module>../sample.splash.app.product</module>
+	</modules>
+
+	<repositories>
+		<repository>
+			<id>efxclipse-repo</id>
+			<layout>p2</layout>
+			<url>file://Users/tomschindl/git/efxclipse/releng/org.eclipse.fx.updatesite/target/site</url>
+		</repository>
+
+	</repositories>
+
+	<pluginRepositories>
+		<pluginRepository>
+			<id>tycho</id>
+			<url>http://repository.sonatype.org/content/groups/sonatype-public-grid</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</pluginRepository>
+	</pluginRepositories>
+
+	<build>
+
+		<!-- build plugins -->
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<extensions>true</extensions>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>target-platform-configuration</artifactId>
+				<version>${tycho-version}</version>
+				<configuration>
+					<resolver>p2</resolver>
+					<pomDependencies>consider</pomDependencies>
+					<environments>
+						<environment>
+							<os>macosx</os>
+							<ws>cocoa</ws>
+							<arch>x86_64</arch>
+						</environment>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86</arch>
+						</environment>
+					</environments>
+				</configuration>
+			</plugin>
+		</plugins>
+
+
+		<!-- defines the default settings for the used plugins -->
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>tycho-compiler-plugin</artifactId>
+					<version>${tycho-version}</version>
+					<configuration>
+						<encoding>UTF-8</encoding>
+						<source>1.8</source>
+						<target>1.8</target>
+						<extraClasspathElements>
+							<extraClasspathElement>
+								<groupId>javafx</groupId>
+								<artifactId>javafx.mvn</artifactId>
+								<version>2.2.0-SNAPSHOT</version>
+							</extraClasspathElement>
+						</extraClasspathElements>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>tycho-source-plugin</artifactId>
+					<version>${tycho-version}</version>
+					<executions>
+						<execution>
+							<id>plugin-source</id>
+							<goals>
+								<goal>plugin-source</goal>
+							</goals>
+						</execution>
+					</executions>
+				</plugin>
+				<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-packaging-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<configuration>
+					<archive>
+						<addMavenDescriptor>false</addMavenDescriptor>
+					</archive>
+				</configuration>
+			</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>junit</groupId>
+				<artifactId>junit</artifactId>
+				<version>${junit-version}</version>
+				<scope>test</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>${mockito-version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/testcases/sample.splash.app/.classpath b/testcases/sample.splash.app/.classpath
new file mode 100644
index 0000000..22f3064
--- /dev/null
+++ b/testcases/sample.splash.app/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testcases/sample.splash.app/.gitignore b/testcases/sample.splash.app/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/testcases/sample.splash.app/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/testcases/sample.splash.app/.project b/testcases/sample.splash.app/.project
new file mode 100644
index 0000000..8a6479c
--- /dev/null
+++ b/testcases/sample.splash.app/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>sample.splash.app</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testcases/sample.splash.app/.settings/ca.ecliptical.pde.ds.prefs b/testcases/sample.splash.app/.settings/ca.ecliptical.pde.ds.prefs
new file mode 100644
index 0000000..963a307
--- /dev/null
+++ b/testcases/sample.splash.app/.settings/ca.ecliptical.pde.ds.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+enabled=true
+path=OSGI-INF/services
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/testcases/sample.splash.app/Application.e4xmi b/testcases/sample.splash.app/Application.e4xmi
new file mode 100644
index 0000000..b9e8e10
--- /dev/null
+++ b/testcases/sample.splash.app/Application.e4xmi
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_LBxvwS8CEeac341peg8x-g" elementId="org.eclipse.e4.application" bindingContexts="_LBxvwC8CEeac341peg8x-g">
+  <children xsi:type="basic:TrimmedWindow" xmi:id="_awGCwC8CEeac341peg8x-g" elementId="sample.splash.app.trimmedwindow.hellosplash" label="Hello Splash" x="100" y="100" width="800" height="600">
+    <mainMenu xmi:id="_vIGK8C80Eeac341peg8x-g" elementId="sample.splash.app.menu.0">
+      <children xsi:type="menu:Menu" xmi:id="_vwJCYC80Eeac341peg8x-g" elementId="sample.splash.app.menu.file" label="File">
+        <children xsi:type="menu:DirectMenuItem" xmi:id="_w1YMIC80Eeac341peg8x-g" elementId="sample.splash.app.directmenuitem.restart" label="Restart" contributionURI="bundleclass://sample.splash.app/sample.splash.app.RestartHandler"/>
+      </children>
+    </mainMenu>
+  </children>
+  <rootContext xmi:id="_LBxvwC8CEeac341peg8x-g" elementId="org.eclipse.ui.contexts.dialogAndWindow" name="In Dialog and Windows">
+    <children xmi:id="_LBxvwi8CEeac341peg8x-g" elementId="org.eclipse.ui.contexts.window" name="In Windows"/>
+    <children xmi:id="_LBxvwy8CEeac341peg8x-g" elementId="org.eclipse.ui.contexts.dialog" name="In Dialogs"/>
+  </rootContext>
+  <addons xmi:id="_LBxvxC8CEeac341peg8x-g" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+  <addons xmi:id="_LBxvxS8CEeac341peg8x-g" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+  <addons xmi:id="_LBxvxi8CEeac341peg8x-g" elementId="org.eclipse.fx.ui.keybindings.e4.service" contributionURI="bundleclass://org.eclipse.fx.ui.keybindings.e4/org.eclipse.fx.ui.keybindings.e4.BindingServiceAddon"/>
+  <addons xmi:id="_LBxvxy8CEeac341peg8x-g" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+  <addons xmi:id="_LBxvyC8CEeac341peg8x-g" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+  <addons xmi:id="_LBxvyS8CEeac341peg8x-g" elementId="org.eclipse.fx.ui.keybindings.e4.model" contributionURI="bundleclass://org.eclipse.fx.ui.keybindings.e4/org.eclipse.fx.ui.keybindings.e4.BindingProcessingAddon"/>
+  <addons xmi:id="_LBxvyi8CEeac341peg8x-g" elementId="org.eclipse.e4.ui.workbench.addons.HandlerProcessingAddon" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
+</application:Application>
diff --git a/testcases/sample.splash.app/META-INF/MANIFEST.MF b/testcases/sample.splash.app/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bf63ffc
--- /dev/null
+++ b/testcases/sample.splash.app/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: My Sample App
+Bundle-SymbolicName: sample.splash.app; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.fx.ui.workbench.fx,
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.services,
+ org.eclipse.e4.core.di,
+ org.eclipse.e4.ui.di,
+ org.eclipse.e4.core.di.extensions,
+ org.eclipse.fx.ui.theme,
+ org.eclipse.fx.ui.di,
+ org.eclipse.e4.core.contexts,
+ org.eclipse.fx.core.databinding,
+ org.eclipse.fx.ui.databinding,
+ org.eclipse.core.databinding,
+ org.eclipse.core.databinding.observable,
+ org.eclipse.core.databinding.property,
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.e4.ui.services,
+ org.eclipse.fx.ui.services,
+ org.eclipse.osgi
+Import-Package: javax.inject;version="1.0.0",
+ org.eclipse.equinox.app;version="1.1.0",
+ org.eclipse.fx.core;version="3.0.0",
+ org.osgi.service.component.annotations;version="1.2.0"
+Service-Component: OSGI-INF/services/theme-default.xml,
+ OSGI-INF/services/sample.splash.app.LoginSplashStartup.xml
diff --git a/testcases/sample.splash.app/OSGI-INF/services/sample.splash.app.LoginSplashStartup.xml b/testcases/sample.splash.app/OSGI-INF/services/sample.splash.app.LoginSplashStartup.xml
new file mode 100644
index 0000000..464de89
--- /dev/null
+++ b/testcases/sample.splash.app/OSGI-INF/services/sample.splash.app.LoginSplashStartup.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="sample.splash.app.LoginSplashStartup">
+   <property name="service.ranking" type="Integer" value="1"/>
+   <service>
+      <provide interface="org.eclipse.fx.ui.services.startup.StartupProgressTrackerService"/>
+   </service>
+   <implementation class="sample.splash.app.LoginSplashStartup"/>
+</scr:component>
\ No newline at end of file
diff --git a/testcases/sample.splash.app/OSGI-INF/services/theme-default.xml b/testcases/sample.splash.app/OSGI-INF/services/theme-default.xml
new file mode 100644
index 0000000..bbde842
--- /dev/null
+++ b/testcases/sample.splash.app/OSGI-INF/services/theme-default.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="sample.splash.app.themes.default">
+	<implementation class="sample.splash.app.themes.DefaultTheme"/>
+	<service>
+		<provide interface="org.eclipse.fx.ui.services.theme.Theme"/>
+	</service>
+	<reference bind="registerStylesheet" cardinality="0..n" interface="org.eclipse.fx.ui.services.theme.Stylesheet" name="Stylesheet" policy="dynamic" unbind="unregisterStylesheet"/>
+</scr:component>
diff --git a/testcases/sample.splash.app/bin/sample/splash/app/LoginSplashStartup.class b/testcases/sample.splash.app/bin/sample/splash/app/LoginSplashStartup.class
new file mode 100644
index 0000000..a9ab6a3
--- /dev/null
+++ b/testcases/sample.splash.app/bin/sample/splash/app/LoginSplashStartup.class
Binary files differ
diff --git a/testcases/sample.splash.app/bin/sample/splash/app/RestartHandler.class b/testcases/sample.splash.app/bin/sample/splash/app/RestartHandler.class
new file mode 100644
index 0000000..fbb603b
--- /dev/null
+++ b/testcases/sample.splash.app/bin/sample/splash/app/RestartHandler.class
Binary files differ
diff --git a/testcases/sample.splash.app/bin/sample/splash/app/themes/DefaultTheme.class b/testcases/sample.splash.app/bin/sample/splash/app/themes/DefaultTheme.class
new file mode 100644
index 0000000..3b2b2df
--- /dev/null
+++ b/testcases/sample.splash.app/bin/sample/splash/app/themes/DefaultTheme.class
Binary files differ
diff --git a/testcases/sample.splash.app/build.properties b/testcases/sample.splash.app/build.properties
new file mode 100644
index 0000000..b8273d0
--- /dev/null
+++ b/testcases/sample.splash.app/build.properties
@@ -0,0 +1,9 @@
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml,\
+               css/,\
+               Application.e4xmi,\
+               OSGI-INF/,\
+               splash.bmp
+
+source.. = src/
diff --git a/testcases/sample.splash.app/css/default.css b/testcases/sample.splash.app/css/default.css
new file mode 100644
index 0000000..c4ad87a
--- /dev/null
+++ b/testcases/sample.splash.app/css/default.css
@@ -0,0 +1 @@
+/* JavaFX CSS - Main CSS-File */
\ No newline at end of file
diff --git a/testcases/sample.splash.app/plugin.xml b/testcases/sample.splash.app/plugin.xml
new file mode 100644
index 0000000..44e1f49
--- /dev/null
+++ b/testcases/sample.splash.app/plugin.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+<extension id="product" point="org.eclipse.core.runtime.products">
+	<product name="Sample Splash" application="org.eclipse.fx.ui.workbench.fx.main-thread-application" >
+		<property name="appName" value="Sample Splash" />
+		
+		<property name="applicationXMI" value="sample.splash.app/Application.e4xmi" />
+		
+		<property name="cssTheme" value="theme.default" />
+		
+	</product>
+	
+</extension>
+</plugin>
diff --git a/testcases/sample.splash.app/pom.xml b/testcases/sample.splash.app/pom.xml
new file mode 100644
index 0000000..f1481a3
--- /dev/null
+++ b/testcases/sample.splash.app/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<name>Sample Splash - application bundle</name>
+	<groupId>sample.splash</groupId>
+	<artifactId>sample.splash.app</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+	<parent>
+		<groupId>sample.splash</groupId>
+		<artifactId>sample.splash.app.releng</artifactId>
+		<relativePath>../sample.splash.app.releng/pom.xml</relativePath>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+
+	<build>
+		<resources>
+			<resource>
+				<directory>.</directory>
+				<includes>
+					<include>META-INF/</include>
+				</includes>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/testcases/sample.splash.app/splash.bmp b/testcases/sample.splash.app/splash.bmp
new file mode 100644
index 0000000..d7d2e30
--- /dev/null
+++ b/testcases/sample.splash.app/splash.bmp
Binary files differ
diff --git a/testcases/sample.splash.app/src/sample/splash/app/LoginSplashStartup.java b/testcases/sample.splash.app/src/sample/splash/app/LoginSplashStartup.java
new file mode 100644
index 0000000..858a534
--- /dev/null
+++ b/testcases/sample.splash.app/src/sample/splash/app/LoginSplashStartup.java
@@ -0,0 +1,33 @@
+package sample.splash.app;
+
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.fx.ui.services.startup.StartupProgressTrackerService;
+import org.eclipse.fx.ui.workbench.fx.services.InteractiveStartupService;
+import org.eclipse.fx.ui.workbench.fx.services.NativeSplashStartupService;
+import org.osgi.service.component.annotations.Component;
+
+import javafx.animation.KeyFrame;
+import javafx.animation.Timeline;
+import javafx.scene.Scene;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+import javafx.util.Duration;
+
+@Component(property="service.ranking:Integer=1")
+public class LoginSplashStartup extends NativeSplashStartupService implements StartupProgressTrackerService {
+
+//	@Override
+//	protected Scene createScene(IApplicationContext applicationContext, Image splashImage) {
+//		return new Scene(new StackPane(new ImageView(splashImage)));
+//	}
+//
+//	@Override
+//	protected void hide(Stage stage) {
+//		Timeline t = new Timeline(new KeyFrame(Duration.millis(10_000), (a) -> {
+//			super.hide(stage);
+//		}));
+//		t.play();
+//	}
+}
diff --git a/testcases/sample.splash.app/src/sample/splash/app/RestartHandler.java b/testcases/sample.splash.app/src/sample/splash/app/RestartHandler.java
new file mode 100644
index 0000000..915f649
--- /dev/null
+++ b/testcases/sample.splash.app/src/sample/splash/app/RestartHandler.java
@@ -0,0 +1,11 @@
+package sample.splash.app;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.fx.ui.services.restart.RestartService;
+
+public class RestartHandler {
+	@Execute
+	public void restart(RestartService service) {
+		service.restart(false);
+	}
+}
diff --git a/testcases/sample.splash.app/src/sample/splash/app/themes/DefaultTheme.java b/testcases/sample.splash.app/src/sample/splash/app/themes/DefaultTheme.java
new file mode 100644
index 0000000..437684b
--- /dev/null
+++ b/testcases/sample.splash.app/src/sample/splash/app/themes/DefaultTheme.java
@@ -0,0 +1,9 @@
+package sample.splash.app.themes;
+
+import org.eclipse.fx.ui.theme.AbstractTheme;
+
+public class DefaultTheme extends AbstractTheme {
+	public DefaultTheme() {
+		super("theme.default", "Default theme", DefaultTheme.class.getClassLoader().getResource("css/default.css"));
+	}
+}