diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b9f0a46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+**/bin/
+**/target/
+**._trace
+**git.properties
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.preferences.feature/.gitignore b/org.eclipse.osbp.preferences.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.preferences.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.preferences.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.preferences.feature/feature.xml b/org.eclipse.osbp.preferences.feature/feature.xml
index 0dbda50..c34eb09 100644
--- a/org.eclipse.osbp.preferences.feature/feature.xml
+++ b/org.eclipse.osbp.preferences.feature/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.preferences.feature"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.preferences">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.preferences.feature/pom.xml b/org.eclipse.osbp.preferences.feature/pom.xml
index e506597..12d89be 100644
--- a/org.eclipse.osbp.preferences.feature/pom.xml
+++ b/org.eclipse.osbp.preferences.feature/pom.xml
@@ -71,17 +71,14 @@
 		</plugins>
 	</build>
 
+
 	<dependencies>
 		<dependency>
-			<groupId>org.eclipse.osbp.preferences</groupId>
-			<artifactId>org.eclipse.osbp.preferences</artifactId>
-			<version>0.9.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.osbp.preferences</groupId>
-			<artifactId>org.eclipse.osbp.preferences.ui.page</artifactId>
-			<version>0.9.0-SNAPSHOT</version>
+			<groupId>org.eclipse.osbp.dependencies</groupId>
+			<artifactId>
+				org.eclipse.osbp.dependencies.bundle.activemq.all.osgi
+			</artifactId>
+			<version>5.14.5-SNAPSHOT</version>
 		</dependency>
 	</dependencies>
-
 </project>
diff --git a/org.eclipse.osbp.preferences.ui.page/.classpath b/org.eclipse.osbp.preferences.ui.page/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.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="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.preferences.ui.page/.gitignore b/org.eclipse.osbp.preferences.ui.page/.gitignore
new file mode 100644
index 0000000..09e3bc9
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/org.eclipse.osbp.preferences.ui.page/.project b/org.eclipse.osbp.preferences.ui.page/.project
index d3691bd..116f451 100644
--- a/org.eclipse.osbp.preferences.ui.page/.project
+++ b/org.eclipse.osbp.preferences.ui.page/.project
@@ -31,12 +31,12 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
diff --git a/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.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/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.preferences.ui.page/META-INF/MANIFEST.MF b/org.eclipse.osbp.preferences.ui.page/META-INF/MANIFEST.MF
index c984204..c46f643 100644
--- a/org.eclipse.osbp.preferences.ui.page/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.preferences.ui.page/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
  org.eclipse.jdt.core,
  org.eclipse.jface,
  org.eclipse.ui,
- org.eclipse.xtext.ui;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.ui;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.osbp.preferences;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.webserver.messagequeue;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
diff --git a/org.eclipse.osbp.preferences.ui.page/pom.xml b/org.eclipse.osbp.preferences.ui.page/pom.xml
index 93654c3..7b40975 100644
--- a/org.eclipse.osbp.preferences.ui.page/pom.xml
+++ b/org.eclipse.osbp.preferences.ui.page/pom.xml
@@ -18,7 +18,6 @@
 		<plugins>
 			<plugin>
 				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.1</version>
 				<configuration>
 					<source>1.8</source>
 					<target>1.8</target>
@@ -33,4 +32,13 @@
 		<relativePath>..</relativePath>
 	</parent>
 	<packaging>eclipse-plugin</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.dependencies</groupId>
+			<artifactId>
+				org.eclipse.osbp.dependencies.bundle.activemq.all.osgi
+			</artifactId>
+			<version>5.14.5-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
 </project>
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/APreferencePage.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/APreferencePage.java
index 9ebfa77..78789f2 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/APreferencePage.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/APreferencePage.java
@@ -45,7 +45,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-abstract public class APreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage, IPreferenceCheckStateProvider {
+public abstract class APreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage, IPreferenceCheckStateProvider {
 
 	protected enum PageType {
 		PREFENCE,
@@ -70,7 +70,7 @@
 	private PageType fPageType;
 	private IAdaptable fAdaptable;
 	
-	public final static String DEFAULT_VALUE_NO = "message_info.gif";//"defaultvalue-no.png";
+	public final static String DEFAULT_VALUE_NO = "message_info.gif";
 	public final static String DEFAULT_VALUE_YES = "defaultvalue-yes.png";
 	
 	public final static String STATUS_TODO = "open.gif";
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATableTreeFieldEditor.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATreeFieldEditor.java
similarity index 72%
rename from org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATableTreeFieldEditor.java
rename to org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATreeFieldEditor.java
index 805c08e..d4513ee 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATableTreeFieldEditor.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ATreeFieldEditor.java
@@ -12,6 +12,9 @@
  */
 package org.eclipse.osbp.preferences.ui.component;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -21,10 +24,9 @@
 import org.eclipse.osbp.preferences.ItemDescription;
 import org.eclipse.osbp.preferences.Preference;
 import org.eclipse.osbp.preferences.ProductConfigurationPrefs.DDL_GENERATION;
+import org.eclipse.osbp.preferences.ui.constants.LicenseConstants;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.TableTree;
-import org.eclipse.swt.custom.TableTreeEditor;
-import org.eclipse.swt.custom.TableTreeItem;
+import org.eclipse.swt.custom.TreeEditor;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -34,13 +36,21 @@
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeDescribedItem;
+import org.eclipse.swt.widgets.TreeItem;
 
-public abstract class ATableTreeFieldEditor extends FieldEditor {
+import com.google.common.collect.ImmutableList;
+
+public abstract class ATreeFieldEditor extends FieldEditor {
 	
 	private final static String DEFAULT_ADD_LABEL = "duplicate";
 	private final static String DEFAULT_REMOVE_LABEL = "remove";
@@ -48,9 +58,9 @@
 	// The top-level control for the field editor.
 	private Composite top;
 	// The list of selected tags.
-	protected TableTree tableTree;
-	TableTreeEditor editor;
-	private Table innerTable;
+	public Tree tree;
+	TreeEditor editor;
+//	private Table innerTable;
 	// The button for adding the contents of
 	// the available list to the selected list.
 	private Button add;
@@ -59,7 +69,7 @@
 	private final ItemDescription fItemDescription;
     protected Label label;
 	
-	public ATableTreeFieldEditor(
+	public ATreeFieldEditor(
 		String name,
 		String labelText,
 		Composite parent,
@@ -68,7 +78,7 @@
 			fItemDescription = itemDescription;
 	}
 
-	protected ItemDescription getItemDescription() {
+	public ItemDescription getItemDescription() {
 		return fItemDescription;
 	}
 	
@@ -91,41 +101,42 @@
 		labelData.horizontalSpan = numColumns;
 		label.setLayoutData(labelData);
 		
-		tableTree = new TableTree(top, SWT.BORDER | SWT.V_SCROLL | SWT.FILL);
+		tree = new Tree(top, SWT.BORDER | SWT.V_SCROLL | SWT.FILL);
 		GridData tableTreeData = new GridData(GridData.FILL_HORIZONTAL);
 		tableTreeData.horizontalSpan = numColumns;
 		tableTreeData.heightHint = buttonHeight * 15;
-		tableTree.setLayoutData(tableTreeData);
-		tableTree.addSelectionListener(new SelectionAdapter() {
+		tree.setLayoutData(tableTreeData);
+		tree.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				selectionChanged();
 			}
 		});
 
-        editor = new TableTreeEditor(tableTree);
+        editor = new TreeEditor(tree);
         //The editor must have the same size as the cell and must
         //not be any smaller than 50 pixels.
         editor.horizontalAlignment = SWT.LEFT;
         editor.grabHorizontal = true;
         editor.minimumWidth = 50;
         // editing the second column
-        final int EDITABLECOLUMN = TableTreeDescribedItem.VALUE;
+        final int EDITABLECOLUMN = TreeDescribedItem.VALUE;
 		
-        tableTree.addSelectionListener(new SelectionAdapter() {
+        tree.addSelectionListener(new SelectionAdapter() {
             public void widgetSelected(SelectionEvent e) {
                 // Clean up any previous editor control
                 Control oldEditor = editor.getEditor();
                 if (oldEditor != null) oldEditor.dispose();
 
                 // Identify the selected row
-                TableTreeItem item = (TableTreeItem)e.item;
+                TreeItem item = (TreeItem)e.item;
                 if (item == null) return;
 
                 // The control that will be the editor must be a child of the Table
                 Control newEditor;
-                if	((ATableTreeFieldEditor.this instanceof DataSourcesFieldEditor) &&
+                if	((ATreeFieldEditor.this instanceof DataSourcesFieldEditor) &&
                 	 (item.getText(0).toLowerCase().contains("type"))) {
-                	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+//                	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+                	final Combo comboEditor = new Combo(tree, SWT.DROP_DOWN | SWT.READ_ONLY);
                 	newEditor = comboEditor;
                 	String selection = item.getText(EDITABLECOLUMN);
                 	int index = 0;
@@ -143,9 +154,10 @@
 						}
 					});
                 }
-                else if	((ATableTreeFieldEditor.this instanceof PersistenceUnitsFieldEditor) &&
+                else if	((ATreeFieldEditor.this instanceof PersistenceUnitsFieldEditor) &&
                    	 (item.getText(0).toLowerCase().contains("source"))) {
-                   	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+//                   	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+                	final Combo comboEditor = new Combo(tree, SWT.DROP_DOWN | SWT.READ_ONLY);
                    	newEditor = comboEditor;
                    	String selection = item.getText(EDITABLECOLUMN);
                    	int index = 0;
@@ -161,13 +173,34 @@
                    	}
                    	comboEditor.addListener(SWT.Modify, new Listener() {
                            public void handleEvent(Event e) {
+                        	if (LicenseConstants.LICENSED_DATABASE_VENDORS.contains(comboEditor.getText())){
+                        		 Display display = Display.getDefault();
+                        		    Shell shell = display.getActiveShell();
+                        		    if (shell != null){
+                    	        int actions = SWT.ICON_WARNING | SWT.OK;
+								MessageBox messageBox = new MessageBox(
+                    	        		shell,
+                        	        	actions );
+                        	        messageBox.setMessage(LicenseConstants.LICENSE_MESSAGE_TEXT.replace(LicenseConstants.DATABASE_VENDOR, comboEditor.getText()));
+                        	        messageBox.setText(LicenseConstants.LICENSE_TITLE_TEXT);
+                        	        messageBox.open();
+//                        	        messageBox.setMessage(
+//                    	        		translator.getDocumentation(this,"checkDataSourceConfigured.text").replace("%%DATASOURCE%%", dataSource)
+//                        	        	+question);
+//                        	        messageBox.setText(
+//                    	        		translator.getDocumentation(this,"checkDataSourceConfigured.title").replace("%%DATASOURCE%%", dataSource)
+//                                		);
+                        		    }
+//
+                        	}
    	                        editor.getItem().setText(EDITABLECOLUMN, comboEditor.getText());
    						}
    					});
                    }
-                else if	((ATableTreeFieldEditor.this instanceof PersistenceUnitsFieldEditor) &&
+                else if	((ATreeFieldEditor.this instanceof PersistenceUnitsFieldEditor) &&
                       	 (item.getText(0).toLowerCase().contains("ddl"))) {
-                  	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+//                  	final Combo comboEditor = new Combo(innerTable, SWT.DROP_DOWN | SWT.READ_ONLY);
+                	final Combo comboEditor = new Combo(tree, SWT.DROP_DOWN | SWT.READ_ONLY);
                   	newEditor = comboEditor;
                   	String selection = item.getText(EDITABLECOLUMN);
                   	int index = 0;
@@ -186,7 +219,8 @@
   					});
                   }
                else {
-	                final Text textEditor = new Text(innerTable, SWT.NONE);
+//	                final Text textEditor = new Text(innerTable, SWT.NONE);
+	                final Text textEditor = new Text(tree, SWT.NONE);
 	                newEditor = textEditor;
 	                textEditor.setText(item.getText(EDITABLECOLUMN));
 	                textEditor.addModifyListener(new ModifyListener() {
@@ -201,17 +235,23 @@
             }
         });
 		
-		// Create the TableTree and set some attributes on the underlying table
-	    innerTable = tableTree.getTable();
-	    innerTable.setHeaderVisible(false);
-	    innerTable.setLinesVisible(false);
-		GridData innerTableData = new GridData(GridData.FILL_BOTH);
-		innerTable.setLayoutData(innerTable);
+		// Create the Tree and set some attributes on the underlying table
+//	    innerTable = tree.getTable();
+//	    innerTable.setHeaderVisible(false);
+//	    innerTable.setLinesVisible(false);
+//		GridData innerTableData = new GridData(GridData.FILL_BOTH);
+//		innerTable.setLayoutData(innerTable);
+        tree.setHeaderVisible(false);
+        tree.setHeaderVisible(false);
 
 	    // Create the columns, passing the underlying table
-    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("Attribute");
-    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("Value");
-    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("");
+//    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("Attribute");
+//    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("Value");
+//    	(new org.eclipse.swt.widgets.TableColumn(innerTable, SWT.FILL)).setText("");
+
+    	(new org.eclipse.swt.widgets.TreeColumn(tree, SWT.FILL)).setText("Attribute");
+    	(new org.eclipse.swt.widgets.TreeColumn(tree, SWT.FILL)).setText("Value");
+    	(new org.eclipse.swt.widgets.TreeColumn(tree, SWT.FILL)).setText("");
 
 		// Create the remove button.
     	if	(hasRemoveButton()) {
@@ -264,12 +304,13 @@
 	}
 
 	private void doLoad(String value) {
-		tableTree.removeAll();
+		tree.removeAll();
 		_doLoad(value, getPreferenceStore().getDefaultString(getPreferenceName()));
-    	org.eclipse.swt.widgets.TableColumn[] columns = innerTable.getColumns();
+//    	org.eclipse.swt.widgets.TableColumn[] columns = innerTable.getColumns();
+    	TreeColumn[] columns = tree.getColumns();
 	    for (int i = 0, n = 3; i < n; i++) {
 	    	columns[i].pack();
-	    	if	(i == TableTreeDescribedItem.HINT) {
+	    	if	(i == TreeDescribedItem.HINT) {
 	        	columns[i].setWidth(30);
 	    	}
 	    	else {
@@ -310,13 +351,13 @@
 
 	// Adds the string in the text field to the list.
 	private void add() {
-		if	(tableTree.getSelectionCount() == 1) {
-			TableTreeItem source = tableTree.getSelection()[0];
+		if	(tree.getSelectionCount() == 1) {
+			TreeItem source = tree.getSelection()[0];
 			while	((source != null) && (source.getParentItem() != null)) {
 				source = source.getParentItem();
 			}
 			if	(source != null) {
-				TableTreeDescribedItem.clone(source, "Copy");
+				TreeDescribedItem.clone(source, "Copy");
 		        Control oldEditor = editor.getEditor();
 		        if (oldEditor != null) oldEditor.dispose();
 			}
@@ -325,8 +366,8 @@
 	}
 	
 	private void remove() {
-		if	(tableTree.getSelectionCount() == 1) {
-			TableTreeItem selected = tableTree.getSelection()[0];
+		if	(tree.getSelectionCount() == 1) {
+			TreeItem selected = tree.getSelection()[0];
 			while	((selected != null) && (selected.getParentItem() != null)) {
 				selected = selected.getParentItem();
 			}
@@ -362,12 +403,13 @@
 	// Sets the enablement of the remove button depending
 	// on the selection in the list.
 	private void selectionChanged() {
-		int index = tableTree.getSelectionCount();
+		TreeItem[] treeItem = tree.getSelection();
+		int index = tree.getSelectionCount();
 		if	(add != null) {
 			add.setEnabled(index == 1);
 		}
 		if	(remove != null) {
-			remove.setEnabled((index == 1) && (tableTree.getItemCount() > 1));
+			remove.setEnabled((index == 1) && (tree.getItemCount() > 1));
 		}
 	}
 	
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/DataSourcesFieldEditor.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/DataSourcesFieldEditor.java
index 6e13924..80eff33 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/DataSourcesFieldEditor.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/DataSourcesFieldEditor.java
@@ -15,18 +15,16 @@
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.swt.widgets.Composite;
-
 import org.eclipse.osbp.preferences.DataSourceConfiguration;
+import org.eclipse.osbp.preferences.DataSourceConfiguration.DataSourceItemDescription;
 import org.eclipse.osbp.preferences.EnumDatabaseVendor;
 import org.eclipse.osbp.preferences.IItemDescribed;
 import org.eclipse.osbp.preferences.ItemDescription;
-import org.eclipse.osbp.preferences.PersistenceUnitConfiguration;
-import org.eclipse.osbp.preferences.DataSourceConfiguration.DataSourceItemDescription;
-import org.eclipse.osbp.preferences.PersistenceUnitConfiguration.PersistenceUnitItemDescription;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeDescribedItem;
+import org.eclipse.swt.widgets.TreeItem;
 
-public class DataSourcesFieldEditor extends ATableTreeFieldEditor {
+public class DataSourcesFieldEditor extends ATreeFieldEditor {
 	
 	public DataSourcesFieldEditor(String name, String labelText,
 			Composite parent) {
@@ -40,14 +38,14 @@
 		Map<String, DataSourceConfiguration> dataItems = DataSourceConfiguration.deserialize(value);
 		Map<String, DataSourceConfiguration> defaultItems = DataSourceConfiguration.deserialize(defaults);
 		for	(DataSourceConfiguration dataItem : dataItems.values()) {
-			new TableTreeDescribedItem(this, dataItem, defaultItems.get(dataItem.getName()));
+			new TreeDescribedItem(this, dataItem, defaultItems.get(dataItem.getName()));
 		}
 	}
 
 	@Override
 	protected String _doStore() {
 		Map<String, DataSourceConfiguration> dataItems = new TreeMap<String, DataSourceConfiguration>();
-		for	(TableTreeItem treeItem : tableTree.getItems()) {
+		for	(TreeItem treeItem : tree.getItems()) {
 			if	(treeItem instanceof IItemDescribed) {
 				IItemDescribed describedItem = (IItemDescribed) treeItem;
 				DataSourceConfiguration dataItem = new DataSourceConfiguration(
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/PersistenceUnitsFieldEditor.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/PersistenceUnitsFieldEditor.java
index 9aeec03..e13db33 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/PersistenceUnitsFieldEditor.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/PersistenceUnitsFieldEditor.java
@@ -19,10 +19,11 @@
 import org.eclipse.osbp.preferences.ItemDescription;
 import org.eclipse.osbp.preferences.PersistenceUnitConfiguration;
 import org.eclipse.osbp.preferences.PersistenceUnitConfiguration.PersistenceUnitItemDescription;
-import org.eclipse.swt.custom.TableTreeItem;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeDescribedItem;
+import org.eclipse.swt.widgets.TreeItem;
 
-public class PersistenceUnitsFieldEditor extends ATableTreeFieldEditor {
+public class PersistenceUnitsFieldEditor extends ATreeFieldEditor {
 
 	public PersistenceUnitsFieldEditor(String name, String labelText,
 			Composite parent) {
@@ -36,14 +37,14 @@
 		Map<String, PersistenceUnitConfiguration> dataItems = PersistenceUnitConfiguration.deserialize(value);
 		Map<String, PersistenceUnitConfiguration> defaultItems = PersistenceUnitConfiguration.deserialize(defaults);
 		for	(PersistenceUnitConfiguration dataItem : dataItems.values()) {
-			new TableTreeDescribedItem(this, dataItem, defaultItems.get(dataItem.getName()));
+			new TreeDescribedItem(this, dataItem, defaultItems.get(dataItem.getName()));
 		}
 	}
 
 	@Override
 	protected String _doStore() {
 		Map<String, PersistenceUnitConfiguration> dataItems = new TreeMap<String, PersistenceUnitConfiguration>();
-		for	(TableTreeItem treeItem : tableTree.getItems()) {
+		for	(TreeItem treeItem : tree.getItems()) {
 			if	(treeItem instanceof IItemDescribed) {
 				IItemDescribed describedItem = (IItemDescribed) treeItem;
 				PersistenceUnitConfiguration dataItem = new PersistenceUnitConfiguration(
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ProductConfigurationFieldEditor.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ProductConfigurationFieldEditor.java
index 01eb75c..559b0d4 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ProductConfigurationFieldEditor.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/ProductConfigurationFieldEditor.java
@@ -18,8 +18,9 @@
 import org.eclipse.osbp.preferences.ui.utils.ConfigurationFileVerifier.ConfigurationFileDescription;
 import org.eclipse.osbp.preferences.ui.utils.ManifestFileVerifier;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeDescribedItem;
 
-public class ProductConfigurationFieldEditor extends ATableTreeFieldEditor {
+public class ProductConfigurationFieldEditor extends ATreeFieldEditor {
 
 	public ProductConfigurationFieldEditor(String name, String labelText, Composite parent) {
 		super(name, labelText, parent, ConfigurationFileDescription.INSTANCE);
@@ -32,11 +33,11 @@
 		if	((productProject != null) && !productFileName.isEmpty()) {
 			ApplicationProjectInspector inspector = new ApplicationProjectInspector(productProject, productFileName);
 			if	(inspector.isApplicationProject()) {
-				new TableTreeDescribedItem(this, inspector.getProductConfigurations(), null);
-				new TableTreeDescribedItem(this, inspector.getProductPlugins(), null);
-				new TableTreeDescribedItem(this, inspector.getProductManifest(), null);
+				new TreeDescribedItem(this, inspector.getProductConfigurations(), null);
+				new TreeDescribedItem(this, inspector.getProductPlugins(), null);
+				new TreeDescribedItem(this, inspector.getProductManifest(), null);
 				for	(ManifestFileVerifier bundle : inspector.getManifestVerifiers()) {
-					new TableTreeDescribedItem(this, bundle, null);
+					new TreeDescribedItem(this, bundle, null);
 				}
 			}
 		}
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/constants/LicenseConstants.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/constants/LicenseConstants.java
new file mode 100644
index 0000000..9d580a5
--- /dev/null
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/constants/LicenseConstants.java
@@ -0,0 +1,14 @@
+package org.eclipse.osbp.preferences.ui.constants;
+
+import java.util.List;
+
+import org.eclipse.osbp.preferences.EnumDatabaseVendor;
+
+import com.google.common.collect.ImmutableList;
+
+public interface LicenseConstants {
+	final List<String> LICENSED_DATABASE_VENDORS = ImmutableList.of(EnumDatabaseVendor.ORACLE.getDriverVendor(), EnumDatabaseVendor.MYSQL.getDriverVendor());
+	final String DATABASE_VENDOR = "{$DATABASE_VENDOR}";
+	final String LICENSE_TITLE_TEXT = "LICENSE";
+	final String LICENSE_MESSAGE_TEXT = DATABASE_VENDOR + " LICENSE!";
+}
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductConfigurationStore.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductConfigurationStore.java
index bfb55f2..857d9e9 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductConfigurationStore.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductConfigurationStore.java
@@ -22,9 +22,11 @@
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.commons.io.IOUtils;
@@ -32,7 +34,6 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -50,6 +51,9 @@
 
 public class ProductConfigurationStore implements IPreferenceStore {
 
+	private static final String PRODUCT = ".product";
+	private static final String CASE_NOT_IMPLEMENTED = "case not implemented";
+	private static final String NOT_IMPLEMENTED = "not implemented";
 	private static final Logger LOGGER = LoggerFactory.getLogger(ProductConfigurationStore.class);
 	private static ProductConfigurationStore sInstance;
 	private static Map<String,IProject> osbpProductProjects = new TreeMap<>();
@@ -107,14 +111,6 @@
 		return prefs.getProject();
 	}
 	
-	private boolean showLanguageSelectInRespectiveLocaleOnPages() {
-		return false; // showLanguageSelectInRespectiveLocale();
-	}
-	
-	public void sortLocalesOnDisplayNameOnPages(Locale[] locales) {
-		LocaleUtils.sortLocalesOnDisplayName(locales, showLanguageSelectInRespectiveLocaleOnPages());
-	}
-	
 	private void setProductConfigurationPrefs(ProductConfigurationPrefs prefs) {
 		LOGGER.error(prefs.getInformation()+" # now actual product configuration");
 		this.prefs = prefs;
@@ -130,9 +126,6 @@
 
 	public void removeProductConfigurationPrefsChangedListener(APreferencePage listener) {
 		prefsChangedListener.remove(listener);
-		if	(prefsChangedListener.isEmpty()) {
-			sInstance = null;
-		}
 	}
 
 	public final boolean isWorkspaceSelected() {
@@ -157,25 +150,25 @@
 	public final void selectOsbpProductProject(String name) {
 		IProject project = osbpProductProjects.get(name);
 		IScopeContext scopeContext = null;
-		ProductConfigurationPrefs prefs = null;
+		ProductConfigurationPrefs newPrefs = null;
 		if	(project != null) {
 			scopeContext = new ProductProjectScope(project);
 		}
 		if	(scopeContext instanceof ProductProjectScope) {
-			prefs = new ProductConfigurationPrefs(name, scopeContext, project);
+			newPrefs = new ProductConfigurationPrefs(name, scopeContext, project);
 		}
 		else if	(scopeContext != null) {
-			prefs = new ProductConfigurationPrefs(name, scopeContext);
+			newPrefs = new ProductConfigurationPrefs(name, scopeContext);
 		}
-		if	(prefs != null) {
-			setProductConfigurationPrefs(prefs);
+		if	(newPrefs != null) {
+			setProductConfigurationPrefs(newPrefs);
 		}
 		else {
 			setProductConfigurationPrefs(ProductConfiguration.prefs());
 		}
 	}
 	
-	public final static ProductConfigurationStore instance() {
+	public static final ProductConfigurationStore instance() {
 		getProjectNames();
 		if	(sInstance == null) {
 			sInstance = new ProductConfigurationStore(ProductConfiguration.prefs());
@@ -206,7 +199,6 @@
 	private boolean getBoolean(IProductConfigurationPrefs prefsUsed, String name) {
 		switch (Preference.by(name)) {
 			case LOCALIZATION_AUTOCREATE: return prefsUsed.willLanguagesAutocreate();
-//			case LOCALIZATION_AUTOTRANSLATE: return prefsUsed.isLanguagesAutotranslate();
 			case LOCALIZATION_SHOW_SELECT_IN_RESPECTIVE_LOCALE: return prefsUsed.showLanguageSelectInRespectiveLocale();
 			case AUTHENTICATION_AUTOLOGIN: return prefsUsed.hasAutoLogin();
 			case AUTHENTICATION_ENCRYPT_PASSWORDS: return prefsUsed.hasEncryptPasswords();
@@ -220,8 +212,10 @@
 			case PROJECT_WIZARD_ABSOLUTE_LOCATION: return prefsUsed.projectWizardUsesAbsoluteLocation();
 			case BPM_ENGINE_HIBERNATE_SHOW_SQL: return prefsUsed.isBpmEngineHibernateShowSql();
 			case BPM_ENGINE_HIBERNATE_FORMAT_SQL: return prefsUsed.isBpmEngineHibernateFormatSql();
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration boolean attribute "+name+" found");
+		LOGGER.error("no Product Configuration boolean attribute {} found", name);
 		return false;
 	}
 
@@ -229,7 +223,6 @@
 	public void setValue(String name, boolean value) {
 		switch (Preference.by(name)) {
 			case LOCALIZATION_AUTOCREATE: prefs.setLanguagesAutocreate(value); return;
-//			case LOCALIZATION_AUTOTRANSLATE: prefs.setLanguagesAutotranslate(value);return;
 			case LOCALIZATION_SHOW_SELECT_IN_RESPECTIVE_LOCALE: prefs.setShowLanguageSelectInRespectiveLocale(value); return;
 			case AUTHENTICATION_AUTOLOGIN: prefs.setAutoLogin(value); return;
 			case AUTHENTICATION_ENCRYPT_PASSWORDS: prefs.setEncryptPasswords(value); return;
@@ -243,8 +236,10 @@
 			case PROJECT_WIZARD_ABSOLUTE_LOCATION: prefs.setProjectWizardUsingAbsoluteLocation(value); return;
 			case BPM_ENGINE_HIBERNATE_SHOW_SQL: prefs.setBpmEngineHibernateShowSql(value); return;
 			case BPM_ENGINE_HIBERNATE_FORMAT_SQL: prefs.setBpmEngineHibernateFormatSql(value); return;
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration boolean attribute "+name+" found, could not set "+value);
+		LOGGER.error("no Product Configuration boolean attribute {} found, could not set {}", name, value);
 	}
 
 	@Override
@@ -265,8 +260,10 @@
 			case HYBRID_REFRESH_PERSPECTIVE_ACTIVE: return prefsUsed.getHybridRefresherMilliSecsActive();
 			case HYBRID_REFRESH_PERSPECTIVE_INACTIVE: return prefsUsed.getHybridRefresherMilliSecsInactive();
 			case BPM_ENGINE_HIBERNATE_MAX_FETCH_DEPTH: return prefsUsed.getBpmEngineHibernateMaxFetchDepth();
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration integer attribute {} found", name);
 		return 0;
 	}
 
@@ -284,8 +281,10 @@
 			case HYBRID_REFRESH_PERSPECTIVE_ACTIVE: prefs.setHybridRefresherMilliSecsActive(value); return;
 			case HYBRID_REFRESH_PERSPECTIVE_INACTIVE: prefs.setHybridRefresherMilliSecsInactive(value); return;
 			case BPM_ENGINE_HIBERNATE_MAX_FETCH_DEPTH: prefs.setBpmEngineHibernateMaxFetchDepth(value); return;
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration integer attribute "+name+" found, could not set "+value);
+		LOGGER.error("no Product Configuration integer attribute {} found, could not set {}", name, value);
 	}
 	
 	public String getString(Preference preference) {
@@ -298,49 +297,47 @@
 	}
 	
 	private String getDesktopUrlPath(String businessBundleClassName) {
+		if(businessBundleClassName.isEmpty()) {
+			return "";
+		}
 		return getUrlPath(businessBundleClassName, false);
 	}
 	
 	private String getMobileUrlPath(String businessBundleClassName) {
+		if(businessBundleClassName.isEmpty()) {
+			return "";
+		}
 		return getUrlPath(businessBundleClassName, true);
 	}
 
-	private final static String JETTY_PARAMETER_PORT = "-Dorg.eclipse.osbp.ecview.jetty.port=";
-	private final static String JETTY_PARAMETER_PATH = "-Dorg.eclipse.osbp.ecview.jetty.contextpath=";
+	private static final String JETTY_PARAMETER_PORT = "-Dorg.eclipse.osbp.ecview.jetty.port=";
+	private static final String JETTY_PARAMETER_PATH = "-Dorg.eclipse.osbp.ecview.jetty.contextpath=";
 	
 	private String getUrlPath(String businessBundleClassName, boolean asMobile) {
 		String urlPath = "";
-		if	((businessBundleClassName != null) && !businessBundleClassName.isEmpty()) {
-			IPath path = prefs.getProjectPath();
-			if	(path != null) {
-				path = path.append(businessBundleClassName+".product");
-				File file = path.toFile();
-				if	(file.exists() && file.isFile()) {
-					try {
-						String content;
-						InputStream fisSourceFile = new FileInputStream(file);
-						content = IOUtils.toString(fisSourceFile, "UTF-8");
-						if	(content != null) {
-							content = content.replace("\r", " ");
-							content = content.replace("\n", " ");
-							content = content.replace("\n", " ");
-							String portNo = "";
-							String baseUrl = "";
-							if	(content.contains(JETTY_PARAMETER_PORT)) {
-								portNo = content.substring(content.indexOf(JETTY_PARAMETER_PORT)+JETTY_PARAMETER_PORT.length()).split(" ")[0];
-							}
-							if	(content.contains(JETTY_PARAMETER_PATH)) {
-								baseUrl = content.substring(content.indexOf(JETTY_PARAMETER_PATH)+JETTY_PARAMETER_PATH.length()).split(" ")[0];
-							}
-							if	(!portNo.isEmpty() && !baseUrl.isEmpty()) {
-								urlPath = "localhost:"+portNo+baseUrl;
-							}
-						}
-					}
-					catch (Exception e) {}
+		File file = prefs.getProjectPath().append(businessBundleClassName+PRODUCT).toFile();
+		try {
+			String content;
+			InputStream fisSourceFile = new FileInputStream(file);
+			content = IOUtils.toString(fisSourceFile, "UTF-8");
+			if	(content != null) {
+				content = content.replace("\r", " ");
+				content = content.replace("\n", " ");
+				content = content.replace("\n", " ");
+				String portNo = "";
+				String baseUrl = "";
+				if	(content.contains(JETTY_PARAMETER_PORT)) {
+					portNo = content.substring(content.indexOf(JETTY_PARAMETER_PORT)+JETTY_PARAMETER_PORT.length()).split(" ")[0];
+				}
+				if	(content.contains(JETTY_PARAMETER_PATH)) {
+					baseUrl = content.substring(content.indexOf(JETTY_PARAMETER_PATH)+JETTY_PARAMETER_PATH.length()).split(" ")[0];
+				}
+				if	(!portNo.isEmpty() && !baseUrl.isEmpty()) {
+					urlPath = "localhost:"+portNo+baseUrl;
 				}
 			}
 		}
+		catch (Exception e) {}	//NOSONAR
 		if	(!urlPath.isEmpty() && asMobile) {
 			urlPath += "mobile";
 		}
@@ -350,7 +347,7 @@
 	public String getProductFileName() {
 		String businessBundleClassName = prefs.getBusinessBundleClassNameReadOnly();
 		if	(!businessBundleClassName.isEmpty()) {
-			businessBundleClassName += ".product";
+			businessBundleClassName += PRODUCT;
 		}
 		return businessBundleClassName;
 	}
@@ -360,18 +357,11 @@
 			case FILE_LOCATION: return prefs.getPreferencesFile();
 			case FILE_EDITOR: return prefs.getPreferencesFile();
 			case FILE_NAME: return ProductConfigurationPrefs.PRODUCT_PREFERENCES;
-			case PRODUCT_FILE: {
-				String businessBundleClassName = prefs.getBusinessBundleClassNameReadOnly();
-				if	(!businessBundleClassName.isEmpty()) {
-					businessBundleClassName += ".product";
-				}
-				return businessBundleClassName;
-			}
+			case PRODUCT_FILE: return getProductFile();
 			case DESKTOP_URL_PATH: return getDesktopUrlPath(prefs.getBusinessBundleClassNameReadOnly());
 			case MOBILE_URL_PATH: return getMobileUrlPath(prefs.getBusinessBundleClassNameReadOnly());
 			case SHOW_PRODUCT_CONFIGURATION: return prefs.getName();
 			case SELECT_PRODUCT_CONFIGURATION: return prefs.getName();
-			//
 			case ACTIVEMQ_BROKER_SERVER: return prefsUsed.getActiveMqBrokerServerName();
 			case BPM_ENGINE_SERVER: return prefsUsed.getBpmServerIp();
 			case BPM_ENGINE_HIBERNATE_SCHEMA_NAME: return prefsUsed.getBpmEngineHibernateSchemaName(prefsUsed.getBpmEnginePersistenceUnit());
@@ -380,73 +370,62 @@
 			case AUTHENTICATION_ADMIN_USERNAME: return prefsUsed.getAdminEmailUsername();
 			case AUTHENTICATION_ADMIN_PASSWORD: return prefsUsed.getAdminEmailPassword();
 			case AUTHENTICATION_ORGANIZATION_ID: return prefsUsed.getAuthenticationOrganizationId();
-//			case DATASOURCE_AUTHENTICATION: return prefsUsed.getDataSourceNameForAuthentication();
-//			case DATASOURCE_BLOB: return prefsUsed.getDataSourceNameForBLOB();
-//			case DATASOURCE_BPM: return prefsUsed.getDataSourceNameForBPM();
-//			case DATASOURCE_BUSINESSDATA: return prefsUsed.getDataSourceNameForBusinessData();
 			case EXCHANGE_RATES_EURO_BASED_DAILY: return prefsUsed.getEuroXRefRatesURLDaily();
 			case EXCHANGE_RATES_EURO_BASED_PREVIOUS: return prefsUsed.getEuroXRefRatesURLPrevious();
 			case JAVA_POS_CONFIGURATION: return prefsUsed.getJavaPosConfiguration();
-			case FILE_CONTENT: {
-				Stream<String> lines=null;
-				try {
-					lines = Files.lines(Paths.get(getString(Preference.FILE_LOCATION), ".settings", getString(Preference.FILE_NAME)+".prefs"));
-					return StringUtils.join(lines.toArray(), "\r\n");
-				} catch (IOException e) {
-					return "";
-				} finally {
-					if( lines != null) 
-						lines.close();
-				}
-			}
-//			case LOCALIZATION_GOOGLE_API_KEY: return prefsUsed.getLanguagesGoogleApiKey();
-//			case LOCALIZATION_GOOGLE_HTTP_REFERRER: return prefsUsed.getLanguagesGoogleHttpReferrer();
-			case LOCALIZATION_SUPPORTED_LANGUAGES: {
-				HashSet<Locale> helper = new HashSet<>(); 
-				for	(Locale locale : prefsUsed.getLanguages().values()) {
-					if	(locale != null) {
-						helper.add(locale);
-					}
-				}
-				Locale[] locales = helper.toArray(new Locale[0]);
-				sortLocalesOnDisplayNameOnPages(locales);
-				String retcode = null;
-				for	(Locale locale : locales) {
-					if	(locale != null) {
-						if	(retcode == null) {
-							retcode = getLanguageDisplayName(locale, showLanguageSelectInRespectiveLocaleOnPages());
-						}
-						else {
-							retcode += CONFIGURATION_ITEM_SEPARATOR+getLanguageDisplayName(locale, showLanguageSelectInRespectiveLocaleOnPages());
-						}
-					}
-				}
-				return retcode;
-			}
+			case DATAINTERCHANGE_CONFIGURATION: return prefsUsed.getDatainterchangeConfiguration();
+			case FILE_CONTENT: return getFileContent();
+			case LOCALIZATION_SUPPORTED_LANGUAGES: return getSupportedLanguages(prefsUsed);
 			case DATASOURCES: return DataSourceConfiguration.serialize(prefsUsed.getDataSources());
 			case PERSISTENCE_UNITS: return PersistenceUnitConfiguration.serialize(prefsUsed.getPersistenceUnits());
 			case LDAP_CONTEXT_FACTORY_URL: return prefsUsed.getLdapContextFactoryUrl();
 			case LDAP_USER_DN_TEMPLATE: return prefsUsed.getLdapUserDnTemplate();
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration string attribute "+name+" found");
+		LOGGER.error("no Product Configuration string attribute {} found", name);
 		return "";
 	}
 
-	public final String getLanguageDisplayName(Locale locale) {
-		return getLanguageDisplayName(locale, prefs.showLanguageSelectInRespectiveLocale());
+	private String getSupportedLanguages(IProductConfigurationPrefs prefsUsed) {
+		return prefsUsed.getLanguages().values().stream().filter(Objects::nonNull)
+				.sorted((l1, l2) -> l1.getDisplayName().compareTo(l2.getDisplayName()))
+				.map(l -> getLanguageDisplayName(l)).collect(Collectors.joining(CONFIGURATION_ITEM_SEPARATOR));
 	}
 
-	public final String getLanguageDisplayName(Locale locale, boolean showLanguageSelectInRespectiveLocale) {
-		return LocaleUtils.getDisplayName(locale, showLanguageSelectInRespectiveLocale)+" "+LANGUAGE_DESCRIPTION_SEPARATOR+" "+locale.toString();
+	private String getFileContent() {
+		Stream<String> lines = null;
+		try {
+			lines = Files.lines(Paths.get(getString(Preference.FILE_LOCATION), ".settings",
+					getString(Preference.FILE_NAME) + ".prefs"));
+			return StringUtils.join(lines.toArray(), "\r\n");
+		} catch (IOException e) {
+			return "";
+		} finally {
+			if (lines != null)
+				lines.close();
+		}
+	}
+
+	private String getProductFile() {
+		String businessBundleClassName = prefs.getBusinessBundleClassNameReadOnly();
+		if (!businessBundleClassName.isEmpty()) {
+			businessBundleClassName += PRODUCT;
+		}
+		return businessBundleClassName;
+	}
+
+	public final String getLanguageDisplayName(Locale locale) {
+		return LocaleUtils.getDisplayName(locale)+" "+LANGUAGE_DESCRIPTION_SEPARATOR+" "+locale.toString();
 	}
 	
-	public final static String CONFIGURATION_ITEM_SEPARATOR = ";";
-	public final static String LANGUAGE_DESCRIPTION_SEPARATOR = "=";
+	public static final String CONFIGURATION_ITEM_SEPARATOR = ";";
+	public static final String LANGUAGE_DESCRIPTION_SEPARATOR = "=";
 	
 	@Override
 	public void setValue(String name, String value) {
 		switch (Preference.by(name)) {
-			case SHOW_PRODUCT_CONFIGURATION: /* NOOP */ return;
+			case SHOW_PRODUCT_CONFIGURATION: return;
 			case SELECT_PRODUCT_CONFIGURATION: selectOsbpProductProject(value); return;
 			case ACTIVEMQ_BROKER_SERVER: prefs.setActiveMqBrokerServerName(value); return;
 			case BPM_ENGINE_SERVER: prefs.setBpmServerIp(value); return;
@@ -456,67 +435,64 @@
 			case AUTHENTICATION_ADMIN_USERNAME: prefs.setAdminEmailUsername(value); return;
 			case AUTHENTICATION_ADMIN_PASSWORD: prefs.setAdminEmailPassword(value); return;
 			case AUTHENTICATION_ORGANIZATION_ID: prefs.setAuthenticationOrganizationId(value); return;
-			//case AUTHENTICATION_LDAP_DN_TEMPLATE: break;
-			//case AUTHENTICATION_LDAP_SERVER: break;
-//			case DATASOURCE_AUTHENTICATION: prefs.setDataSourceForAuthentication(value); return;
-//			case DATASOURCE_BLOB: prefs.setDataSourceForBLOB(value); return;
-//			case DATASOURCE_BPM: prefs.setDataSourceForBPM(value); return;
-//			case DATASOURCE_BUSINESSDATA: prefs.setDataSourceForBusinessData(value); return;
+			case AUTHENTICATION_LDAP_DN_TEMPLATE:
+			case AUTHENTICATION_LDAP_SERVER: break;
 			case EXCHANGE_RATES_EURO_BASED_DAILY: prefs.setEuroForeignExchangeReferenceRatesURLDaily(value); return;
 			case EXCHANGE_RATES_EURO_BASED_PREVIOUS: prefs.setEuroForeignExchangeReferenceRatesURLPrevious(value); return;
 			case JAVA_POS_CONFIGURATION: prefs.setJavaPosConfiguration(value); return;
+			case DATAINTERCHANGE_CONFIGURATION: prefs.setDatainterchangeConfiguration(value); return;
 			case FILE_CONTENT: return;
 			case FILE_LOCATION: return;
 			case FILE_NAME: return;
-//			case LOCALIZATION_GOOGLE_API_KEY: prefs.setLanguagesGoogleApiKey(value); return;
-//			case LOCALIZATION_GOOGLE_HTTP_REFERRER: prefs.setLanguagesGoogleHttpReferrer(value); return;
-			case LOCALIZATION_SUPPORTED_LANGUAGES: {
-				Map<String, Locale> locales = new HashMap<String, Locale>(); 
-				String[] localesISO = value.split(CONFIGURATION_ITEM_SEPARATOR);
-				for(String localeISO : localesISO) {
-					try {
-						Locale locale = null; 
-						String[] lParts = localeISO.split(LANGUAGE_DESCRIPTION_SEPARATOR)[1].trim().split("_");
-						if (lParts.length == 1) {
-							locale = new Locale(lParts[0]);
-						} else if (lParts.length == 2) {
-							locale = new Locale(lParts[0], lParts[1]);
-						} else if (lParts.length == 3) {
-							locale = new Locale(lParts[0], lParts[1], lParts[2]);
-						}
-						locales.put(localeISO, locale);
-					}
-					catch (Exception e) {
-						LOGGER.error("could not set lanuage "+localeISO, e);
-					}
-				}
-				prefs.setLanguages(locales);
-				return;
-			}
+			case LOCALIZATION_SUPPORTED_LANGUAGES: setSupportedLanguages(value); return;
 			case DATASOURCES: prefs.setDataSources(DataSourceConfiguration.deserialize(value)); return;
 			case PERSISTENCE_UNITS: prefs.setPersistenceUnits(PersistenceUnitConfiguration.deserialize(value)); return;
 			case LDAP_CONTEXT_FACTORY_URL: prefs.setLdapContextFactoryUrl(value); return;
 			case LDAP_USER_DN_TEMPLATE: prefs.setLdapUserDnTemplate(value); return;
+			default:
+				LOGGER.error(CASE_NOT_IMPLEMENTED);
 		}
-		LOGGER.error("no Product Configuration string attribute "+name+" found, could not set "+value);
+		LOGGER.error("no Product Configuration string attribute {} found, could not set {}", name, value);
+	}
+
+	private void setSupportedLanguages(String value) {
+		Map<String, Locale> locales = new HashMap<>(); 
+		String[] localesISO = value.split(CONFIGURATION_ITEM_SEPARATOR);
+		for(String localeISO : localesISO) {
+			try {
+				Locale locale = null; 
+				String[] lParts = localeISO.split(LANGUAGE_DESCRIPTION_SEPARATOR)[1].trim().split("_");
+				if (lParts.length == 1) {
+					locale = new Locale(lParts[0]);
+				} else if (lParts.length == 2) {
+					locale = new Locale(lParts[0], lParts[1]);
+				} else if (lParts.length == 3) {
+					locale = new Locale(lParts[0], lParts[1], lParts[2]);
+				}
+				locales.put(localeISO, locale);
+			}
+			catch (Exception e) {
+				LOGGER.error("could not set lanuage "+localeISO, e);
+			}
+		}
+		prefs.setLanguages(locales);
 	}
 
 	// --- unused methods ---
 	
 	@Override
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public boolean contains(String name) {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	@Override
 	public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
@@ -526,13 +502,13 @@
 
 	@Override
 	public double getDefaultDouble(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration double attribute {} found", name);
 		return 0;
 	}
 
 	@Override
 	public float getDefaultFloat(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration float attribute {} found", name);
 		return 0;
 	}
 
@@ -543,7 +519,7 @@
 
 	@Override
 	public long getDefaultLong(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration long attribute {} found", name);
 		return 0;
 	}
 
@@ -554,19 +530,19 @@
 
 	@Override
 	public double getDouble(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration double attribute {} found", name);
 		return 0;
 	}
 
 	@Override
 	public float getFloat(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration float attribute {} found", name);
 		return 0;
 	}
 
 	@Override
 	public long getLong(String name) {
-		LOGGER.error("no Product Configuration integer attribute "+name+" found");
+		LOGGER.error("no Product Configuration long attribute {} found", name);
 		return 0;
 	}
 
@@ -582,61 +558,61 @@
 
 	@Override
 	public void putValue(String name, String value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, double value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, float value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, int value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, long value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, String defaultObject) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setDefault(String name, boolean value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setToDefault(String name) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setValue(String name, double value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setValue(String name, float value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 
 	@Override
 	public void setValue(String name, long value) {
-		// TODO Auto-generated method stub
+		LOGGER.error(NOT_IMPLEMENTED);
 	}
 }
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductProjectScope.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductProjectScope.java
index 65bb024..bb75b11 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductProjectScope.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/data/ProductProjectScope.java
@@ -25,12 +25,12 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.osbp.preferences.ProductConfigurationPrefs;
 import org.osgi.service.prefs.BackingStoreException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.eclipse.osbp.preferences.ProductConfigurationPrefs;
-
+@SuppressWarnings("restriction")
 public final class ProductProjectScope implements IScopeContext {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(ProductProjectScope.class);
@@ -61,7 +61,7 @@
 	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
 	 */
 	public IPath getLocation() {
-		IProject project = ((IResource) context).getProject();
+		IProject project = context.getProject();
 		IResource resource = ProductConfigurationPrefs.getPrefsFile(project);
 		if	(resource == null) {
 			IPath location = project.getLocation();
@@ -95,7 +95,7 @@
 			    Class<?> preferenceClass = preference.getClass();
 			    Method getLoadLevel = preferenceClass.getDeclaredMethod("getLoadLevel");
 			    getLoadLevel.setAccessible(true);
-		    	ProjectPreferences loadLevelInstance = (ProjectPreferences) getLoadLevel.invoke(preference);
+				ProjectPreferences loadLevelInstance = (ProjectPreferences) getLoadLevel.invoke(preference);
 			    Class<?>loadLevelClass = loadLevelInstance.getClass();
 			    Field fileField = loadLevelClass.getDeclaredField("file");
 			    fileField.setAccessible(true);
@@ -103,7 +103,8 @@
 			    if	((activeFile == null) || !activeFile.getFullPath().toOSString().equals(prefsFile.getFullPath().toOSString())) {
 			    	fileField.set(loadLevelInstance, prefsFile);
 			    	preference.sync();
-			    	LOGGER.info("set preference file to: "+prefsFile.getFullPath().toOSString());
+			    	String msg = prefsFile.getFullPath().toOSString();
+			    	LOGGER.info("set preference file to: {}", msg);
 			    }
 			}
 		    catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException | BackingStoreException | NoSuchMethodException | SecurityException | InvocationTargetException x) {
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageExternalDataSources.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageExternalDataSources.java
index 5189717..26eba21 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageExternalDataSources.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageExternalDataSources.java
@@ -38,8 +38,12 @@
 			new Item("URL for external XML file provider for Euro based exchange rates"),
 			new Item(Type.TEXT, Preference.EXCHANGE_RATES_EURO_BASED_PREVIOUS, "All historic"),
 			new Item(Type.TEXT, Preference.EXCHANGE_RATES_EURO_BASED_DAILY, "Actual day"),
-			new Item("JavaPOS"),
-			new Item(Type.TEXT, Preference.JAVA_POS_CONFIGURATION, "Configuration"),
+			new Item(""),
+			new Item("JavaPOS Settings"),
+			new Item(Type.TEXT, Preference.JAVA_POS_CONFIGURATION, "Configuration file"),
+			new Item(""),
+			new Item("DataInterchange Settings"),
+			new Item(Type.TEXT, Preference.DATAINTERCHANGE_CONFIGURATION, "Configuration file"),
 		};
 	}
 
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageLocalization.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageLocalization.java
index bb02599..dd16e3c 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageLocalization.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/page/PreferencePageLocalization.java
@@ -15,6 +15,7 @@
 import java.util.HashSet;
 import java.util.Locale;
 
+import org.eclipse.osbp.preferences.LocaleUtils;
 import org.eclipse.osbp.preferences.Preference;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.preferences.ui.component.APreferencePage;
@@ -47,20 +48,13 @@
 			locales = helper.toArray(new Locale[0]);
 		}
 		String[][] retcode = new String[locales.length][2];
-		// --- sort by display name used in the respective locale, if it is configured ---
-		store.sortLocalesOnDisplayNameOnPages(locales);
+		LocaleUtils.sortLocalesOnDisplayName(locales);
 		int idx = 0;
 		for (Locale locale : locales) {
-//			String loc = locale.getLanguage();
-//			if (locale.getCountry().length() > 0) {
-//				loc += "_" + locale.getCountry();
-//			} else if (locale.getVariant().length() > 0) {
-//				loc += "_" + locale.getVariant();
-//			}
 			String loc = locale.toString();
 			if	(!loc.isEmpty()) {
 				retcode[idx][0] = loc;
-				retcode[idx][1] = store.getLanguageDisplayName(locale, false);
+				retcode[idx][1] = store.getLanguageDisplayName(locale);
 			}
 			idx++;
 		}
@@ -82,12 +76,9 @@
 			new Item(Type.TEXT, Preference.SHOW_PRODUCT_CONFIGURATION, "Product Configuration", false),
 			new Item(""),
 			new Item(Type.BOOLEAN, Preference.LOCALIZATION_AUTOCREATE, "Extract I18N Properties"),
-			// new Item(Type.BOOLEAN, Preference.LOCALIZATION_AUTOTRANSLATE, "Use Google Translator"),
 			new Item(Type.BOOLEAN, Preference.LOCALIZATION_SHOW_SELECT_IN_RESPECTIVE_LOCALE, "Display locale selection in respective locale"),
-			// new Item(Type.TEXT, Preference.LOCALIZATION_GOOGLE_API_KEY, "Google API Key"),
-			// new Item(Type.TEXT, Preference.LOCALIZATION_GOOGLE_HTTP_REFERRER, "Google HTTP Referrer"),
 			new Item(""),
-			new Item(Type.LIST_ADD_REMOVE, Preference.LOCALIZATION_SUPPORTED_LANGUAGES, "Supported Languages", getAvailableLanguages(), ProductConfigurationStore.CONFIGURATION_ITEM_SEPARATOR),
+			new Item(Type.LIST_ADD_REMOVE, Preference.LOCALIZATION_SUPPORTED_LANGUAGES, "Supported Languages", getAvailableLanguages(), ProductConfigurationStore.CONFIGURATION_ITEM_SEPARATOR)
 		};
 	}
 }
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ApplicationProjectInspector.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ApplicationProjectInspector.java
index d6cf647..4ffc897 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ApplicationProjectInspector.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ApplicationProjectInspector.java
@@ -34,7 +34,7 @@
 	
 	private final IProject applicationProject;
 	private final String applicationFileName;
-	private ProductFilePluginsVerifier productPlugins = null;
+	private ProductFileFeaturesPluginsVerifier productPlugins = null;
 	private ProductFileConfigurationsVerifier productConfigurations = null;
 	private ManifestFileVerifier productManifest = null;
 	Map<String,ManifestFileVerifier> manifestVerifiers = null;
@@ -81,7 +81,7 @@
 		return	productManifest.isFragmentOfHost("org.eclipse.osbp.wizard.ui");
 	}
 
-	public ProductFilePluginsVerifier getProductPlugins() {
+	public ProductFileFeaturesPluginsVerifier getProductPlugins() {
 		initialize();
 		return productPlugins;
 	}
@@ -103,7 +103,7 @@
 	
 	private void initialize() {
 		if	(manifestVerifiers == null) {
-			productPlugins = new ProductFilePluginsVerifier(applicationProject, applicationFileName);
+			productPlugins = new ProductFileFeaturesPluginsVerifier(applicationProject, applicationFileName);
 			productConfigurations = new ProductFileConfigurationsVerifier(applicationProject, applicationFileName);
 			productManifest = new ManifestFileVerifier(applicationProject);
 			manifestVerifiers = new TreeMap<>();
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileConfigurationsVerifier.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileConfigurationsVerifier.java
index 61f5b23..21c9bce 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileConfigurationsVerifier.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileConfigurationsVerifier.java
@@ -41,6 +41,14 @@
 		return ProductFileBase.getValues(document, "product/configurations", "plugin", "id");
 	}
 
+	/**
+	 * Get all &lt;product&gt;&lt;configurations&gt;&lt;plugin&gt; items with <code>id="???"</code> as id
+	 */
+	@Override
+	public Map<String,Map<String,String>> getPluginFeatures() {
+		return ProductFileBase.getValues(document, "product/configurations", "feature", "id");
+	}
+	
 	@Override
 	public String getRowName() {
 		return "Product configurations ...";
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFilePluginsVerifier.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileFeaturesPluginsVerifier.java
similarity index 71%
rename from org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFilePluginsVerifier.java
rename to org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileFeaturesPluginsVerifier.java
index 539f632..2e3dd52 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFilePluginsVerifier.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileFeaturesPluginsVerifier.java
@@ -16,19 +16,19 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.osbp.preferences.ProductFileBase;
-import org.eclipse.osbp.preferences.ProductFilePlugins;
+import org.eclipse.osbp.preferences.ProductFileFeatures;
 import org.eclipse.osbp.preferences.ui.data.ProductConfigurationStore;
 
 /**
  *  Class to verify all &lt;plugins&gt; inside a <code>*.product</code> configuration file.
  */
-public class ProductFilePluginsVerifier extends ProductFileVerifier {
+public class ProductFileFeaturesPluginsVerifier extends ProductFileVerifier {
 
-	public ProductFilePluginsVerifier(IProject project, String productFileName) {
+	public ProductFileFeaturesPluginsVerifier(IProject project, String productFileName) {
 		super(
 			project,
 			productFileName,
-			new ProductFilePlugins(ProductConfigurationStore.instance().getProductConfigurationPrefs()),
+			new ProductFileFeatures(ProductConfigurationStore.instance().getProductConfigurationPrefs()),
 			project.getName()+"/"+productFileName
 		);
 	}
@@ -41,6 +41,14 @@
 		return ProductFileBase.getValues(document, "product/plugins", "plugin", "id");
 	}
 
+	/**
+	 * Get all &lt;product&gt;&lt;plugins&gt;&lt;plugin&gt; items with <code>id="???"</code> as id
+	 */
+	@Override
+	public Map<String,Map<String,String>> getPluginFeatures() {
+		return ProductFileBase.getValues(document, "product/features", "feature", "id");
+	}
+	
 	@Override
 	public String getRowName() {
 		return "Product plugins ...";
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileVerifier.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileVerifier.java
index 3e526ba..4583924 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileVerifier.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/utils/ProductFileVerifier.java
@@ -59,13 +59,15 @@
 			e.printStackTrace();
 		}
 		this.document = document;
-		Map<String, Map<String, String>> actual = getPluginBundles();
+//		Map<String, Map<String, String>> actual = getPluginBundles();
+		Map<String, Map<String, String>> actual = getPluginFeatures();
 		verifyNecessary("required", actual, base.getRequiredAsMap());
 		verifyNecessary("recommended", actual, base.getRecommendedAsMap());
 		verifyDeprecated("deprecated", actual, base.getDeprecatedAsMap());
 	}
 
 	abstract public Map<String,Map<String,String>> getPluginBundles();
+	abstract public Map<String, Map<String, String>> getPluginFeatures();
 
 	/**
 	 * For every violation found a subitem will be generated.
@@ -110,4 +112,5 @@
 	public SubItem[] getSubItems() {
 		return subItems.toArray(new SubItem[0]);
 	}
+
 }
diff --git a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/TableTreeDescribedItem.java b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/swt/widgets/TreeDescribedItem.java
similarity index 76%
rename from org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/TableTreeDescribedItem.java
rename to org.eclipse.osbp.preferences.ui.page/src/org/eclipse/swt/widgets/TreeDescribedItem.java
index 1be3c26..70dcb69 100644
--- a/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/osbp/preferences/ui/component/TableTreeDescribedItem.java
+++ b/org.eclipse.osbp.preferences.ui.page/src/org/eclipse/swt/widgets/TreeDescribedItem.java
@@ -10,24 +10,25 @@
  * Contributors:   
  * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
  */
-package org.eclipse.osbp.preferences.ui.component;
+package org.eclipse.swt.widgets;
 
 import org.eclipse.osbp.preferences.AItemDescribed;
 import org.eclipse.osbp.preferences.AItemDescribed.SubItem;
 import org.eclipse.osbp.preferences.IItemDescribed;
 import org.eclipse.osbp.preferences.ItemDescription;
+import org.eclipse.osbp.preferences.ui.component.APreferencePage;
+import org.eclipse.osbp.preferences.ui.component.ATreeFieldEditor;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.TableTreeItem;
 
-public class TableTreeDescribedItem extends TableTreeItem implements IItemDescribed {
+public class TreeDescribedItem extends TreeItem implements IItemDescribed {
 
-	private final ATableTreeFieldEditor fParent;
+	private final ATreeFieldEditor fParent;
 
 	private final static int ATTRIBUTE = 0;
-	protected final static int VALUE = 2;
-	protected final static int HINT = 1;
+	public final static int VALUE = 2;
+	public final static int HINT = 1;
 	
-	public TableTreeDescribedItem(ATableTreeFieldEditor parent, AItemDescribed dataItem, AItemDescribed defaultItem) {
+	public TreeDescribedItem(ATreeFieldEditor parent, AItemDescribed dataItem, AItemDescribed defaultItem) {
 		this(parent);
 		ItemDescription description = fParent.getItemDescription();
 		if	(dataItem.getRowName() == null) {
@@ -40,7 +41,7 @@
 		String[] columnNames = description.getColumnNames();
 		if	(dataItem.getSubItems() != null) {
 			for (SubItem subItem : dataItem.getSubItems()) {
-				TableTreeItem attribute = new TableTreeItem(this, SWT.NONE);
+				TreeItem attribute = new TreeItem(this, SWT.NONE);
 				attribute.setText(ATTRIBUTE, subItem.getAction());
 				attribute.setText(VALUE, subItem.getInformation());
 				attribute.setImage(HINT, APreferencePage.getImage(subItem.getIcon()));
@@ -51,7 +52,7 @@
 			if	(columnNames.length > 0) {
 				boolean isDefault = defaultItem != null;
 				for (int idx = 0; idx<columnNames.length; idx++) {
-					TableTreeItem attribute = new TableTreeItem(this, SWT.NONE);
+					TreeItem attribute = new TreeItem(this, SWT.NONE);
 					attribute.setText(ATTRIBUTE, columnNames[idx]);
 					attribute.setText(VALUE, dataItem.getValue(columnNames[idx]));
 					if	(defaultItem != null && dataItem.getValue(columnNames[idx]).equals(defaultItem.getValue(columnNames[idx]))) {
@@ -67,19 +68,19 @@
 		}
 	}
 	
-	public static TableTreeDescribedItem clone(TableTreeItem source, String postfix) {
-		TableTreeDescribedItem cloned = null;
-		if	(source instanceof TableTreeDescribedItem) {
-			TableTreeDescribedItem sourceItem = (TableTreeDescribedItem) source;
+	public static TreeDescribedItem clone(TreeItem source, String postfix) {
+		TreeDescribedItem cloned = null;
+		if	(source instanceof TreeDescribedItem) {
+			TreeDescribedItem sourceItem = (TreeDescribedItem) source;
 			ItemDescription description = sourceItem.fParent.getItemDescription();
-			cloned = new TableTreeDescribedItem(sourceItem.fParent);
+			cloned = new TreeDescribedItem(sourceItem.fParent);
 			cloned.setText(ATTRIBUTE, description.getRowName());
 			cloned.setText(VALUE, sourceItem.getText(VALUE)+postfix);
 			cloned.setImage(HINT, APreferencePage.getImage(APreferencePage.DEFAULT_VALUE_NO));
 			String[] columnNames = description.getColumnNames();
 			for (int idx = 0; idx<columnNames.length; idx++) {
-				TableTreeItem sourceAttribute = sourceItem.getItem(idx);
-				TableTreeItem cloneAttribute = new TableTreeItem(cloned, SWT.NONE);
+				TreeItem sourceAttribute = sourceItem.getItem(idx);
+				TreeItem cloneAttribute = new TreeItem(cloned, SWT.NONE);
 				cloneAttribute.setText(ATTRIBUTE, columnNames[idx]);
 				cloneAttribute.setText(VALUE, sourceAttribute.getText(VALUE));
 				cloneAttribute.setImage(HINT, APreferencePage.getImage(APreferencePage.DEFAULT_VALUE_NO));
@@ -88,8 +89,8 @@
 		return cloned;
 	}
 	
-	public TableTreeDescribedItem(ATableTreeFieldEditor parent) {
-		super(parent.tableTree, SWT.NONE);
+	public TreeDescribedItem(ATreeFieldEditor parent) {
+		super(parent.tree, SWT.NONE);
 		fParent = parent;
 	}
 
diff --git a/org.eclipse.osbp.preferences/.classpath b/org.eclipse.osbp.preferences/.classpath
new file mode 100644
index 0000000..8b37caa
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.classpath
@@ -0,0 +1,8 @@
+<?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="src" path="xtend-gen/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.preferences/.gitignore b/org.eclipse.osbp.preferences/.gitignore
new file mode 100644
index 0000000..92145bc
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
\ No newline at end of file
diff --git a/org.eclipse.osbp.preferences/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.preferences/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.preferences/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.preferences/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6e80039
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+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.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.preferences/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.preferences/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.preferences/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.preferences/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.preferences/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.preferences/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.preferences/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.preferences/META-INF/MANIFEST.MF b/org.eclipse.osbp.preferences/META-INF/MANIFEST.MF
index b33895c..d9575b6 100644
--- a/org.eclipse.osbp.preferences/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.preferences/META-INF/MANIFEST.MF
@@ -14,17 +14,18 @@
  org.eclipse.persistence.config;version="2.6.0",
  org.eclipse.persistence.sessions;version="2.6.1",
  org.osgi.framework;version="1.6.0",
- org.osgi.service.jdbc
+ org.osgi.service.jdbc,
+ javax.annotation
 Require-Bundle: org.slf4j.api;bundle-version="1.7.2",
  org.eclipse.equinox.preferences,
- javax.annotation;bundle-version="[1.1.0,1.2.0)",
  javax.inject;bundle-version="1.0.0",
  org.eclipse.core.runtime,
  org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
  com.google.guava,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.xtend.lib,
- org.eclipse.xtend.lib.macro,
- org.eclipse.persistence.core
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.xtend.lib;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.xtend.lib.macro;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.persistence.core,
+ org.eclipse.core.variables
 Bundle-Vendor: Eclipse OSBP
 Bundle-Activator: org.eclipse.osbp.preferences.Activator
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/EnumDatabaseVendor.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/EnumDatabaseVendor.java
index 57550ca..16da1f7 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/EnumDatabaseVendor.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/EnumDatabaseVendor.java
@@ -16,242 +16,227 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.IBundleGroup;
+import org.eclipse.core.runtime.IBundleGroupProvider;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
+
 class VARIABLE { // NOSONAR
-	protected static final String VENDOR 	= "%%VENDOR%%";
-	protected static final String TYPE		= "%%TYPE%%";
-	protected static final String SERVER 	= "%%SERVER%%";
-	protected static final String PORT		= "%%PORT%%";
-	protected static final String DATABASE	= "%%DATABASE%%";
-	protected static final String USERHOME	= "%%USERHOME%%";
+	protected static final String VENDOR = "%%VENDOR%%";
+	protected static final String TYPE = "%%TYPE%%";
+	protected static final String SERVER = "%%SERVER%%";
+	protected static final String PORT = "%%PORT%%";
+	protected static final String DATABASE = "%%DATABASE%%";
+	protected static final String USERHOME = "%%USERHOME%%";
 }
 
 public enum EnumDatabaseVendor {
-	/*...
-	// http://hsqldb.org/doc/src/org/hsqldb/jdbc/JDBCDriver.html
-	// http://hsqldb.org/doc/guide/dbproperties-chapt.html
-	HSQLDB_IN_MEMORY	("hsqldb",     "",   	"org.hsqldb.jdbc.JDBCDriver",
-		"jdbc:hsqldb:mem:"+VARIABLE.DATABASE
-		// http://h2database.com/html/features.html#execute_sql_on_connection
-		+";INIT="
-			// create schema on initial startup
-			// http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_schemas_schema_objects
-			// http://www.hsqldb.org/doc/guide/ch09.html#N11DB1
-			//+"ALTER SCHEMA PUBLIC RENAME TO "+VARIABLE.DATABASE
-			//+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE
-			// SEPARATOR between multipe SQL commandos
-			//+"\\;"
-			// use this schema as default
-			+"SET SCHEMA "+VARIABLE.DATABASE
-			// SEPARATOR between multipe SQL commandos
-		+"", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user"
-		),
-	// http://www.h2database.com/html/features.html#database_url
-	HSQLDB_LOCAL_FILE	("hsqldb",	   "",   	"org.hsqldb.jdbc.JDBCDriver",
-		"jdbc:hsqldb:file:"+VARIABLE.USERHOME+"/"+VARIABLE.DATABASE
-		// http://h2database.com/html/features.html#execute_sql_on_connection
-		+";INIT="
-			// create schema on initial startup
-			// http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_schemas_schema_objects
-			// http://www.hsqldb.org/doc/guide/ch09.html#N11DB1
-			//+"ALTER SCHEMA PUBLIC RENAME TO "+VARIABLE.DATABASE
-			//+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE
-			// SEPARATOR between multipe SQL commandos
-			//+"\\;"
-			// use this schema as default
-			+"SET SCHEMA "+VARIABLE.DATABASE
-			// SEPARATOR between multipe SQL commandos
-		+"", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user"
-		),
-	*/
-	DERBY_IN_MEMORY	(true, "derby",     "",   	"org.apache.derby.jdbc.EmbeddedDriver",
-		"jdbc:derby:memory:"+VARIABLE.DATABASE
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp17453.html
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlpinmemdb.html
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp40653.html
-		+";create=true"
-		+"", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
-		"org.hibernate.dialect.DerbyTenSevenDialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\"/>\n"+
-		"      <plugin id=\"org.apache.derby\"/>",
-		"id int",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
-			}
-		},
+	/*
+	 * ... // http://hsqldb.org/doc/src/org/hsqldb/jdbc/JDBCDriver.html //
+	 * http://hsqldb.org/doc/guide/dbproperties-chapt.html HSQLDB_IN_MEMORY
+	 * ("hsqldb", "", "org.hsqldb.jdbc.JDBCDriver",
+	 * "jdbc:hsqldb:mem:"+VARIABLE.DATABASE //
+	 * http://h2database.com/html/features.html#execute_sql_on_connection
+	 * +";INIT=" // create schema on initial startup //
+	 * http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#
+	 * dbc_schemas_schema_objects //
+	 * http://www.hsqldb.org/doc/guide/ch09.html#N11DB1
+	 * //+"ALTER SCHEMA PUBLIC RENAME TO "+VARIABLE.DATABASE
+	 * //+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE // SEPARATOR between
+	 * multipe SQL commandos //+"\\;" // use this schema as default
+	 * +"SET SCHEMA "+VARIABLE.DATABASE // SEPARATOR between multipe SQL
+	 * commandos +"", "JDBC",
+	 * "driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user"
+	 * ), // http://www.h2database.com/html/features.html#database_url
+	 * HSQLDB_LOCAL_FILE ("hsqldb", "", "org.hsqldb.jdbc.JDBCDriver",
+	 * "jdbc:hsqldb:file:"+VARIABLE.USERHOME+"/"+VARIABLE.DATABASE //
+	 * http://h2database.com/html/features.html#execute_sql_on_connection
+	 * +";INIT=" // create schema on initial startup //
+	 * http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#
+	 * dbc_schemas_schema_objects //
+	 * http://www.hsqldb.org/doc/guide/ch09.html#N11DB1
+	 * //+"ALTER SCHEMA PUBLIC RENAME TO "+VARIABLE.DATABASE
+	 * //+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE // SEPARATOR between
+	 * multipe SQL commandos //+"\\;" // use this schema as default
+	 * +"SET SCHEMA "+VARIABLE.DATABASE // SEPARATOR between multipe SQL
+	 * commandos +"", "JDBC",
+	 * "driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user"
+	 * ),
+	 */
+	DERBY_IN_MEMORY(true, "derby", "", "org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:memory:" + VARIABLE.DATABASE
+	// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp17453.html
+	// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlpinmemdb.html
+	// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp40653.html
+			+ ";create=true" + "", "JDBC",
+			"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
+			"org.hibernate.dialect.DerbyTenSevenDialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.eclipse.osbp.dependencies.feature.derby\"/>",
+			"id int", "uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
+		}
+	},
 	// https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html
 	// https://db.apache.org/derby/integrate/plugin_help/derby_app.html
-	DERBY_LOCAL_FILE	(false, "derby",     "",   	"org.apache.derby.jdbc.EmbeddedDriver",
-		"jdbc:derby:directory:"+VARIABLE.USERHOME+"/"+VARIABLE.DATABASE
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp17453.html
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlpinmemdb.html
-		// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp40653.html
-		+";create=true"
-		+"", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
-		"org.hibernate.dialect.DerbyTenSevenDialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\"/>\n"+
-		"      <plugin id=\"org.apache.derby\"/>",
-		"id int",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
-			}
-		},
+	DERBY_LOCAL_FILE(false, "derby", "", "org.apache.derby.jdbc.EmbeddedDriver",
+			"jdbc:derby:directory:" + VARIABLE.USERHOME + "/" + VARIABLE.DATABASE
+			// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp17453.html
+			// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlpinmemdb.html
+			// https://db.apache.org/derby/docs/10.8/devguide/cdevdvlp40653.html
+					+ ";create=true" + "",
+			"JDBC", "driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
+			"org.hibernate.dialect.DerbyTenSevenDialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.eclipse.osbp.dependencies.feature.derby\"/>",
+			"id int", "uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
+		}
+	},
 	// https://karussell.wordpress.com/2009/06/09/hibernate-cfg-xml-settings-for-derby-oracle-and-h2/
 	// https://db.apache.org/derby/integrate/plugin_help/derby_app.html
-	DERBY_CLIENT	(false, "derby",     "",   	"org.apache.derby.jdbc.ClientDriver",
-		"jdbc:derby://"+VARIABLE.SERVER+":"+VARIABLE.PORT+"/"+VARIABLE.DATABASE+";create=true", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
-		"org.hibernate.dialect.DerbyDialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\"/>\n"+
-		"      <plugin id=\"org.apache.derby\"/>",
-		"id int",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
-			}
-		},
+	DERBY_CLIENT(false, "derby", "", "org.apache.derby.jdbc.ClientDriver",
+			"jdbc:derby://" + VARIABLE.SERVER + ":" + VARIABLE.PORT + "/" + VARIABLE.DATABASE + ";create=true", "JDBC",
+			"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
+			"org.hibernate.dialect.DerbyDialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.derby\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.eclipse.osbp.dependencies.feature.derby\"/>",
+			"id int", "uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_DERBY);
+		}
+	},
 	// http://www.h2database.com/html/features.html#in_memory_databases
-	H2_IN_MEMORY	(true, "h2",     "",   	"org.h2.Driver",
-		"jdbc:h2:mem:"+VARIABLE.DATABASE
-		// http://h2database.com/html/features.html#execute_sql_on_connection
-		+";LOCK_MODE=0"
-		+";INIT="
+	H2_IN_MEMORY(true, "h2", "", "org.h2.Driver", "jdbc:h2:mem:" + VARIABLE.DATABASE
+	// http://h2database.com/html/features.html#execute_sql_on_connection
+			+ ";LOCK_MODE=0" + ";INIT="
 			// create schema on initial startup
-			+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE
+			+ "CREATE SCHEMA IF NOT EXISTS " + VARIABLE.DATABASE
 			// SEPARATOR between multipe SQL commandos
-			+"\\;"
+			+ "\\;"
 			// use this schema as default
-			+"SET SCHEMA "+VARIABLE.DATABASE
+			+ "SET SCHEMA " + VARIABLE.DATABASE
 			// SEPARATOR between multipe SQL commandos
-			+"\\;"
-			// ??? set autocommit to false due to own implemented commit statements ?!?
-			+"SET AUTOCOMMIT=FALSE"
-		// http://h2database.com/html/features.html#auto_mixed_mode
-		// H2 can't mix memory AND AUTO-SERVER - +";AUTO_SERVER=TRUE"
-		// http://h2database.com/html/features.html#in_memory_databases
-		+";DB_CLOSE_DELAY=-1" 
-		+"", 
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
-		"org.hibernate.dialect.H2Dialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\"/>\n"+
-		"      <plugin id=\"org.h2\"/>\n"+
-		"      <plugin id=\"org.ops4j.pax.jdbc.h2\"/>",
-		/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist also discussed at http://stackoverflow.com/questions/9909893/jpa-how-to-annotate-id-so-its-autoincrements-without-sequence-table */
-		"/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist */ uuid String",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_H2);
-			}
-			/**
-			 * in H2 there are no schema names!
-			 */
-			@Override
-			public String applySchemaNameSpecifications(String schemaName) {
-				return null;
-			}
-		},
+			+ "\\;"
+			// ??? set autocommit to false due to own implemented commit
+			// statements ?!?
+			+ "SET AUTOCOMMIT=FALSE"
+			// http://h2database.com/html/features.html#auto_mixed_mode
+			// H2 can't mix memory AND AUTO-SERVER - +";AUTO_SERVER=TRUE"
+			// http://h2database.com/html/features.html#in_memory_databases
+			+ ";DB_CLOSE_DELAY=-1" + "", "JDBC",
+			"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
+			"org.hibernate.dialect.H2Dialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.eclipse.osbp.dependencies.feature.h2\"/>",
+			/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist also discussed at http://stackoverflow.com/questions/9909893/jpa-how-to-annotate-id-so-its-autoincrements-without-sequence-table*/
+			"/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist */ uuid String",
+			"uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_H2);
+		}
+
+		/**
+		 * in H2 there are no schema names!
+		 */
+		@Override
+		public String applySchemaNameSpecifications(String schemaName) {
+			return null;
+		}
+		
+	},
 	// http://www.h2database.com/html/features.html#database_url
-	H2_LOCAL_FILE	(false, "h2",	   "",   	"org.h2.Driver",
-		"jdbc:h2:file:"+VARIABLE.USERHOME+"/"+VARIABLE.DATABASE
-		// http://h2database.com/html/features.html#execute_sql_on_connection
-		+";LOCK_MODE=0"
-		+";INIT="
+	H2_LOCAL_FILE(false, "h2", "", "org.h2.Driver", "jdbc:h2:file:" + VARIABLE.USERHOME + "/" + VARIABLE.DATABASE
+	// http://h2database.com/html/features.html#execute_sql_on_connection
+			+ ";LOCK_MODE=0" + ";INIT="
 			// create schema on initial startup
-			+"CREATE SCHEMA IF NOT EXISTS "+VARIABLE.DATABASE
+			+ "CREATE SCHEMA IF NOT EXISTS " + VARIABLE.DATABASE
 			// SEPARATOR between multipe SQL commandos
-			+"\\;"
+			+ "\\;"
 			// use this schema as default
-			+"SET SCHEMA "+VARIABLE.DATABASE
+			+ "SET SCHEMA " + VARIABLE.DATABASE
 			// SEPARATOR between multipe SQL commandos
-			+"\\;"
-			// ??? set autocommit to false due to own implemented commit statements ?!?
-			+"SET AUTOCOMMIT=FALSE"
-		// http://h2database.com/html/features.html#auto_mixed_mode
-		+";AUTO_SERVER=TRUE" 
-		+"",  
-		"JDBC",
-		"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
-		"org.hibernate.dialect.H2Dialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\"/>\n"+
-		"      <plugin id=\"org.h2\"/>\n"+
-		"      <plugin id=\"org.ops4j.pax.jdbc.h2\"/>",
-		/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist also discussed at http://stackoverflow.com/questions/9909893/jpa-how-to-annotate-id-so-its-autoincrements-without-sequence-table */
-		"/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist */ uuid String",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_H2);
-			}
-			/**
-			 * in H2 there are no schema names!
-			 */
-			@Override
-			public String applySchemaNameSpecifications(String schemaName) {
-				return "APP";
-			}
-		},
+			+ "\\;"
+			// ??? set autocommit to false due to own implemented commit
+			// statements ?!?
+			+ "SET AUTOCOMMIT=FALSE"
+			// http://h2database.com/html/features.html#auto_mixed_mode
+			+ ";AUTO_SERVER=TRUE" + "", "JDBC",
+			"driverType, URL, description, logWriter, loginTimeout, password, passwordChars, url, user",
+			"org.hibernate.dialect.H2Dialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.h2\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.eclipse.osbp.dependencies.feature.h2\"/>",
+			/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist also discussed at http://stackoverflow.com/questions/9909893/jpa-how-to-annotate-id-so-its-autoincrements-without-sequence-table*/
+			"/** do NOT use <code>int</code> for id in H2, because table SEQUENCE doesn't exist */ uuid String",
+			"uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_H2);
+		}
+
+		/**
+		 * in H2 there are no schema names!
+		 */
+		@Override
+		public String applySchemaNameSpecifications(String schemaName) {
+			return "APP";
+		}
+	},
 	// see samples
-	// - http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-connect-drivermanager.html
-	// - http://www.mkyong.com/jdbc/how-to-connect-to-mysql-with-jdbc-driver-java/
+	// -
+	// http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-connect-drivermanager.html
+	// -
+	// http://www.mkyong.com/jdbc/how-to-connect-to-mysql-with-jdbc-driver-java/
 	// - http://www.vogella.com/tutorials/MySQLJava/article.html
-	MYSQL			(false, "mysql",  "thin", 	"com.mysql.jdbc.Driver",
-		"jdbc:"+VARIABLE.VENDOR+"://"+VARIABLE.SERVER+":"+VARIABLE.PORT+"/"+VARIABLE.DATABASE, 
-		"JDBC", 
-		"URL, allowLoadLocalInfile, allowMasterDownConnections, allowMultiQueries, allowNanAndInf, allowUrlInLocalInfile, alwaysSendSetIsolation, authenticationPlugins, autoClosePStmtStreams, autoDeserialize, autoGenerateTestcaseScript, autoReconnect, autoReconnectForConnectionPools, autoReconnectForPools, autoSlowLog, blobsAreStrings, cacheCallableStatements, cacheCallableStmts, cachePrepStmts, cachePreparedStatements, cacheResultSetMetadata, cacheServerConfiguration, callableStatementCacheSize, callableStmtCacheSize, capitalizeDBMDTypes, capitalizeTypeNames, characterEncoding, characterSetResults, clientCertificateKeyStorePassword, clientCertificateKeyStoreType, clientCertificateKeyStoreUrl, clientInfoProvider, clobCharacterEncoding, clobberStreamingResults, compensateOnDuplicateKeyUpdateCounts, connectTimeout, connectionAttributes, connectionCollation, connectionLifecycleInterceptors, continueBatchOnError, createDatabaseIfNotExist, databaseName, defaultAuthenticationPlugin, defaultFetchSize, detectCustomCollations, detectServerPreparedStmts, disabledAuthenticationPlugins, disconnectOnExpiredPasswords, dontTrackOpenResources, dumpMetadataOnColumnNotFound, dumpQueriesOnException, dynamicCalendars, elideSetAutoCommits, emptyStringsConvertToZero, emulateLocators, emulateUnsupportedPstmts, enablePacketDebug, enableQueryTimeouts, encoding, exceptionInterceptors, explainSlowQueries, failOverReadOnly, functionsNeverReturnBlobs, gatherPerfMetrics, gatherPerformanceMetrics, generateSimpleParameterMetadata, getProceduresReturnsFunctions, holdResultsOpenOverStatementClose, ignoreNonTxTables, includeInnodbStatusInDeadlockExceptions, includeThreadDumpInDeadlockExceptions, includeThreadNamesAsStatementComment, initialTimeout, interactiveClient, isInteractiveClient, jdbcCompliantTruncation, jdbcCompliantTruncationForReads, largeRowSizeThreshold, loadBalanceAutoCommitStatementRegex, loadBalanceAutoCommitStatementThreshold, loadBalanceBlacklistTimeout, loadBalanceConnectionGroup, loadBalanceEnableJMX, loadBalanceExceptionChecker, loadBalancePingTimeout, loadBalanceSQLExceptionSubclassFailover, loadBalanceSQLStateFailover, loadBalanceStrategy, loadBalanceValidateConnectionOnSwapServer, localSocketAddress, logSlowQueries, logWriter, logXaCommands, logger, loggerClassName, loginTimeout, maintainTimeStats, maxAllowedPacket, maxQuerySizeToLog, maxReconnects, maxRows, metadataCacheSize, netTimeoutForStreamingResults, noAccessToProcedureBodies, noDatetimeStringSync, noTimezoneConversionForTimeType, nullCatalogMeansCurrent, nullNamePatternMatchesAll, overrideSupportsIntegrityEnhancementFacility, packetDebugBufferSize, padCharsWithSpace, paranoid, parseInfoCacheFactory, password, passwordCharacterEncoding, pedantic, pinGlobalTxToPhysicalConnection, populateInsertRowWithDefaultValues, port, portNumber, prepStmtCacheSize, prepStmtCacheSqlLimit, preparedStatementCacheSize, preparedStatementCacheSqlLimit, processEscapeCodesForPrepStmts, profileSQL, profileSql, profilerEventHandler, propertiesTransform, propertiesViaRef, queriesBeforeRetryMaster, queryTimeoutKillsConnection, reconnectAtTxEnd, relaxAutoCommit, replicationEnableJMX, reportMetricsIntervalMillis, requireSSL, resourceId, resultSetSizeThreshold, retainStatementAfterResultSetClose, retriesAllDown, rewriteBatchedStatements, rollbackOnPooledClose, roundRobinLoadBalance, runningCTS13, secondsBeforeRetryMaster, selfDestructOnPingMaxOperations, selfDestructOnPingSecondsLifetime, serverConfigCacheFactory, serverName, serverTimezone, sessionVariables, slowQueryThresholdMillis, slowQueryThresholdNanos, socketFactory, socketFactoryClassName, socketTimeout, statementInterceptors, strictFloatingPoint, strictUpdates, tcpKeepAlive, tcpNoDelay, tcpRcvBuf, tcpSndBuf, tcpTrafficClass, tinyInt1isBit, traceProtocol, transformedBitIsBoolean, treatUtilDateAsTimestamp, trustCertificateKeyStorePassword, trustCertificateKeyStoreType, trustCertificateKeyStoreUrl, ultraDevHack, url, useAffectedRows, useBlobToStoreUTF8OutsideBMP, useColumnNamesInFindColumn, useCompression, useConfigs, useCursorFetch, useDirectRowUnpack, useDynamicCharsetInfo, useFastDateParsing, useFastIntParsing, useGmtMillisForDatetimes, useHostsInPrivileges, useInformationSchema, useJDBCCompliantTimezoneShift, useJvmCharsetConverters, useLegacyDatetimeCode, useLocalSessionState, useLocalTransactionState, useNanosForElapsedTime, useOldAliasMetadataBehavior, useOldUTF8Behavior, useOnlyServerErrorMessages, useReadAheadInput, useSSL, useSSPSCompatibleTimezoneShift, useServerPrepStmts, useServerPreparedStmts, useSqlStateCodes, useStreamLengthsInPrepStmts, useTimezone, useUltraDevWorkAround, useUnbufferedInput, useUnicode, useUsageAdvisor, user, utf8OutsideBmpExcludedColumnNamePattern, utf8OutsideBmpIncludedColumnNamePattern, verifyServerCertificate, yearIsDateType, zeroDateTimeBehavior",
-		"org.hibernate.dialect.MySQLDialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.mysql\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"com.mysql.jdbc\"/>\n"+
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.mysql\"/>",
-		"id int",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_MYSQL);
-			}
-		},
-	ORACLE 			(false, "oracle", "thin", 	"oracle.jdbc.OracleDriver",
-		"jdbc:"+VARIABLE.VENDOR+":"+VARIABLE.TYPE+":@"+VARIABLE.SERVER+":"+VARIABLE.PORT+":"+VARIABLE.DATABASE, 
-		"Oracle-JDBC", 
-		null,
-		"org.hibernate.dialect.Oracle10gDialect",
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.oracle\" autoStart=\"true\" startLevel=\"2\" />",
-		"      <plugin id=\"oracleJdbc.osgi\"/>\n"+
-		"      <plugin id=\"org.eclipse.gemini.dbaccess.oracle\"/>",
-		"id int",
-		"uuid String"
-		) {
-			@Override
-			public String applySqlSpecifications(String sqlStatement) {
-				return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_ORACLE);
-			}
-		};
-	
+	MYSQL(false, "mysql", "thin", "com.mysql.jdbc.Driver",
+			"jdbc:" + VARIABLE.VENDOR + "://" + VARIABLE.SERVER + ":" + VARIABLE.PORT + "/" + VARIABLE.DATABASE, "JDBC",
+			"URL, allowLoadLocalInfile, allowMasterDownConnections, allowMultiQueries, allowNanAndInf, allowUrlInLocalInfile, alwaysSendSetIsolation, authenticationPlugins, autoClosePStmtStreams, autoDeserialize, autoGenerateTestcaseScript, autoReconnect, autoReconnectForConnectionPools, autoReconnectForPools, autoSlowLog, blobsAreStrings, cacheCallableStatements, cacheCallableStmts, cachePrepStmts, cachePreparedStatements, cacheResultSetMetadata, cacheServerConfiguration, callableStatementCacheSize, callableStmtCacheSize, capitalizeDBMDTypes, capitalizeTypeNames, characterEncoding, characterSetResults, clientCertificateKeyStorePassword, clientCertificateKeyStoreType, clientCertificateKeyStoreUrl, clientInfoProvider, clobCharacterEncoding, clobberStreamingResults, compensateOnDuplicateKeyUpdateCounts, connectTimeout, connectionAttributes, connectionCollation, connectionLifecycleInterceptors, continueBatchOnError, createDatabaseIfNotExist, databaseName, defaultAuthenticationPlugin, defaultFetchSize, detectCustomCollations, detectServerPreparedStmts, disabledAuthenticationPlugins, disconnectOnExpiredPasswords, dontTrackOpenResources, dumpMetadataOnColumnNotFound, dumpQueriesOnException, dynamicCalendars, elideSetAutoCommits, emptyStringsConvertToZero, emulateLocators, emulateUnsupportedPstmts, enablePacketDebug, enableQueryTimeouts, encoding, exceptionInterceptors, explainSlowQueries, failOverReadOnly, functionsNeverReturnBlobs, gatherPerfMetrics, gatherPerformanceMetrics, generateSimpleParameterMetadata, getProceduresReturnsFunctions, holdResultsOpenOverStatementClose, ignoreNonTxTables, includeInnodbStatusInDeadlockExceptions, includeThreadDumpInDeadlockExceptions, includeThreadNamesAsStatementComment, initialTimeout, interactiveClient, isInteractiveClient, jdbcCompliantTruncation, jdbcCompliantTruncationForReads, largeRowSizeThreshold, loadBalanceAutoCommitStatementRegex, loadBalanceAutoCommitStatementThreshold, loadBalanceBlacklistTimeout, loadBalanceConnectionGroup, loadBalanceEnableJMX, loadBalanceExceptionChecker, loadBalancePingTimeout, loadBalanceSQLExceptionSubclassFailover, loadBalanceSQLStateFailover, loadBalanceStrategy, loadBalanceValidateConnectionOnSwapServer, localSocketAddress, logSlowQueries, logWriter, logXaCommands, logger, loggerClassName, loginTimeout, maintainTimeStats, maxAllowedPacket, maxQuerySizeToLog, maxReconnects, maxRows, metadataCacheSize, netTimeoutForStreamingResults, noAccessToProcedureBodies, noDatetimeStringSync, noTimezoneConversionForTimeType, nullCatalogMeansCurrent, nullNamePatternMatchesAll, overrideSupportsIntegrityEnhancementFacility, packetDebugBufferSize, padCharsWithSpace, paranoid, parseInfoCacheFactory, password, passwordCharacterEncoding, pedantic, pinGlobalTxToPhysicalConnection, populateInsertRowWithDefaultValues, port, portNumber, prepStmtCacheSize, prepStmtCacheSqlLimit, preparedStatementCacheSize, preparedStatementCacheSqlLimit, processEscapeCodesForPrepStmts, profileSQL, profileSql, profilerEventHandler, propertiesTransform, propertiesViaRef, queriesBeforeRetryMaster, queryTimeoutKillsConnection, reconnectAtTxEnd, relaxAutoCommit, replicationEnableJMX, reportMetricsIntervalMillis, requireSSL, resourceId, resultSetSizeThreshold, retainStatementAfterResultSetClose, retriesAllDown, rewriteBatchedStatements, rollbackOnPooledClose, roundRobinLoadBalance, runningCTS13, secondsBeforeRetryMaster, selfDestructOnPingMaxOperations, selfDestructOnPingSecondsLifetime, serverConfigCacheFactory, serverName, serverTimezone, sessionVariables, slowQueryThresholdMillis, slowQueryThresholdNanos, socketFactory, socketFactoryClassName, socketTimeout, statementInterceptors, strictFloatingPoint, strictUpdates, tcpKeepAlive, tcpNoDelay, tcpRcvBuf, tcpSndBuf, tcpTrafficClass, tinyInt1isBit, traceProtocol, transformedBitIsBoolean, treatUtilDateAsTimestamp, trustCertificateKeyStorePassword, trustCertificateKeyStoreType, trustCertificateKeyStoreUrl, ultraDevHack, url, useAffectedRows, useBlobToStoreUTF8OutsideBMP, useColumnNamesInFindColumn, useCompression, useConfigs, useCursorFetch, useDirectRowUnpack, useDynamicCharsetInfo, useFastDateParsing, useFastIntParsing, useGmtMillisForDatetimes, useHostsInPrivileges, useInformationSchema, useJDBCCompliantTimezoneShift, useJvmCharsetConverters, useLegacyDatetimeCode, useLocalSessionState, useLocalTransactionState, useNanosForElapsedTime, useOldAliasMetadataBehavior, useOldUTF8Behavior, useOnlyServerErrorMessages, useReadAheadInput, useSSL, useSSPSCompatibleTimezoneShift, useServerPrepStmts, useServerPreparedStmts, useSqlStateCodes, useStreamLengthsInPrepStmts, useTimezone, useUltraDevWorkAround, useUnbufferedInput, useUnicode, useUsageAdvisor, user, utf8OutsideBmpExcludedColumnNamePattern, utf8OutsideBmpIncludedColumnNamePattern, verifyServerCertificate, yearIsDateType, zeroDateTimeBehavior",
+			"org.hibernate.dialect.MySQLDialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.mysql\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"org.osbee.dependencies.feature.mysql\"/>\n", 
+			"id int",
+			"uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_MYSQL);
+		}
+
+		@Override
+		public String getToDateSQLMethod() {
+			return "str_to_date";
+
+		}
+
+		@Override
+		public String getToTimestampSQLMethod() {
+			return "str_to_date";
+		}
+	},
+	ORACLE(false, "oracle", "thin", "oracle.jdbc.OracleDriver",
+			"jdbc:" + VARIABLE.VENDOR + ":" + VARIABLE.TYPE + ":@" + VARIABLE.SERVER + ":" + VARIABLE.PORT + ":"
+					+ VARIABLE.DATABASE,
+			"Oracle-JDBC", null, "org.hibernate.dialect.Oracle10gDialect",
+			"      <plugin id=\"org.eclipse.gemini.dbaccess.oracle\" autoStart=\"true\" startLevel=\"2\" />",
+			"      <feature id=\"net.osbee.dependencies.feature.oracle\"/>\n", 
+			"id int",
+			"uuid String") {
+		@Override
+		public String applySqlSpecifications(String sqlStatement) {
+			return sqlStatement.replace(ONE_ROW_ONE_COLUMN_TABLE, ONE_ROW_ONE_COLUMN_TABLE_ORACLE);
+		}
+
+
+		@Override
+		public String getToTimestampSQLMethod() {
+			return "to_timestamp";
+		}
+	};
+
 	private final boolean fIsInMemory;
 	private final String fDriverVendor;
 	private final String fDriverType;
@@ -259,115 +244,124 @@
 	private final String fJdbcUrlFormat;
 	private final String fPersistenceBatchWriting;
 	private final String fHibernateDialect;
-	private final String fProductPlugins;
+	private final String fProductFeatures;
 	private final String fProductConfigurations;
 	private final String fEntityPropertyBaseID;
 	private final String fEntityPropertyBaseUUID;
 	private final List<String> fPropertyKeys;
 
-	private EnumDatabaseVendor(boolean isInMemory, String driverVendor, String driverType, String driverClass, String jdbcUrlFormat, String persistenceBatchWriting, String propertyKeys, String hibernateDialect, String productConfigurations, String productPlugins, String entityPropertyBaseID, String entityPropertyBaseUUID) {
-		fIsInMemory					= isInMemory;
-		fDriverVendor 				= driverVendor;
-		fDriverType 				= driverType;
-		fDriverClass 				= driverClass;
-		fJdbcUrlFormat				= jdbcUrlFormat;
-		fPersistenceBatchWriting	= persistenceBatchWriting;
-		fPropertyKeys			= new ArrayList<>();
-		if	(propertyKeys != null) {
-			for	(String propertyKey : propertyKeys.split(",")) {
+	private EnumDatabaseVendor(boolean isInMemory, String driverVendor, String driverType, String driverClass,
+			String jdbcUrlFormat, String persistenceBatchWriting, String propertyKeys, String hibernateDialect,
+			String productConfigurations, String productFeatures, String entityPropertyBaseID,
+			String entityPropertyBaseUUID) {
+		fIsInMemory = isInMemory;
+		fDriverVendor = driverVendor;
+		fDriverType = driverType;
+		fDriverClass = driverClass;
+		fJdbcUrlFormat = jdbcUrlFormat;
+		fPersistenceBatchWriting = persistenceBatchWriting;
+		fPropertyKeys = new ArrayList<>();
+		if (propertyKeys != null) {
+			for (String propertyKey : propertyKeys.split(",")) {
 				fPropertyKeys.add(propertyKey.trim());
 			}
 		}
-		fHibernateDialect			= hibernateDialect;
-		fProductPlugins				= productPlugins;
-		fProductConfigurations		= productConfigurations;
-		fEntityPropertyBaseID		= entityPropertyBaseID;
-		fEntityPropertyBaseUUID		= entityPropertyBaseUUID;
+		fHibernateDialect = hibernateDialect;
+		fProductFeatures = productFeatures;
+		fProductConfigurations = productConfigurations;
+		fEntityPropertyBaseID = entityPropertyBaseID;
+		fEntityPropertyBaseUUID = entityPropertyBaseUUID;
 	}
-	
+
 	private static boolean equalsIgnoreCase(String s1, String s2) {
 		s1 = s1.replaceAll("_IN_", "").replaceAll("_", ""); // NOSONAR
 		s2 = s2.replaceAll("_IN_", "").replaceAll("_", ""); // NOSONAR
 		return s1.equalsIgnoreCase(s2);
 	}
-	
-	public static String getNecessaryPlugins(Set<EnumDatabaseVendor> vendors) {
+
+	public static String getDatabaseFeatures(Set<EnumDatabaseVendor> vendors) {
 		ArrayList<String> result = new ArrayList<String>();
-		for	(EnumDatabaseVendor vendor : vendors) {
-			result.add(vendor.getProductPlugins());
+		for (EnumDatabaseVendor vendor : vendors) {
+			result.add(vendor.getProductFeatures());
 		}
 		return String.join("\n", result);
 	}
-	
-	public static String getUnnecessaryPlugins(Set<EnumDatabaseVendor> vendors) {
-		ArrayList<String> result = new ArrayList<String>();
-		for	(EnumDatabaseVendor vendor : values()) {
-			if	(!vendors.contains(vendor)) {
-				result.add(vendor.getProductPlugins());
-			}
-		}
-		return String.join("\n", result);
-	}
-	
+
 	public static String getNecessaryConfigurations(Set<EnumDatabaseVendor> vendors) {
 		ArrayList<String> result = new ArrayList<String>();
-		for	(EnumDatabaseVendor vendor : vendors) {
+		for (EnumDatabaseVendor vendor : vendors) {
 			result.add(vendor.getProductConfigurations());
 		}
 		return String.join("\n", result);
 	}
-	
+
 	public static String getUnnecessaryConfigurations(Set<EnumDatabaseVendor> vendors) {
 		ArrayList<String> result = new ArrayList<String>();
-		for	(EnumDatabaseVendor vendor : values()) {
-			if	(!vendors.contains(vendor)) {
+		for (EnumDatabaseVendor vendor : values()) {
+			if (!vendors.contains(vendor)) {
 				result.add(vendor.getProductConfigurations());
 			}
 		}
 		return String.join("\n", result);
 	}
-	
+
 	public static EnumDatabaseVendor byName(String vendorName) { // NOSONAR
 		return byName(vendorName, vendorName, vendorName);
 	}
-	
+
 	public static EnumDatabaseVendor byName(String vendorName, String driverVendor, String dataBaseName) { // NOSONAR
-		for	(EnumDatabaseVendor step : values()) {
-			if	(equalsIgnoreCase(step.name(), vendorName) || equalsIgnoreCase(step.fDriverVendor, vendorName)) {
+		for (EnumDatabaseVendor step : values()) {
+			if (equalsIgnoreCase(step.name(), vendorName) || equalsIgnoreCase(step.fDriverVendor, vendorName)) {
 				return step;
 			}
 		}
-		for	(EnumDatabaseVendor step : values()) {
-			if	(equalsIgnoreCase(step.name(), dataBaseName) || equalsIgnoreCase(step.fDriverVendor, dataBaseName)) {
+		for (EnumDatabaseVendor step : values()) {
+			if (equalsIgnoreCase(step.name(), dataBaseName) || equalsIgnoreCase(step.fDriverVendor, dataBaseName)) {
 				return step;
 			}
-			if	(equalsIgnoreCase(step.name(), driverVendor) || equalsIgnoreCase(step.fDriverVendor, driverVendor)) {
+			if (equalsIgnoreCase(step.name(), driverVendor) || equalsIgnoreCase(step.fDriverVendor, driverVendor)) {
 				return step;
 			}
 		}
 		return ORACLE;
 	}
-	
+
 	public static final String ONE_ROW_ONE_COLUMN_TABLE = "{{ONE_ROW_ONE_COLUMN_TABLE}}";
 	public static final String ONE_ROW_ONE_COLUMN_TABLE_DERBY = "SYSIBM.SYSDUMMY1";
 	public static final String ONE_ROW_ONE_COLUMN_TABLE_H2 = "DUAL";
 	public static final String ONE_ROW_ONE_COLUMN_TABLE_MYSQL = "DUAL";
 	public static final String ONE_ROW_ONE_COLUMN_TABLE_ORACLE = "DUAL";
-	
+
 	/**
 	 * @param sqlStatement
 	 * @return applied vendor specific SQL statement
 	 */
 	abstract public String applySqlSpecifications(String sqlStatement);
 
+	/**
+	 * @param sqlStatement
+	 * @return applied vendor specific 'to date' SQL statement prefix
+	 */
+	public String getToDateSQLMethod() {
+		return "to_date";
+	}
+	
+	/**
+	 * @param sqlStatement
+	 * @return applied vendor specific 'to timestamp' SQL statement prefix
+	 */
+	public String getToTimestampSQLMethod() {
+		return "to_timestamp";
+	}
+	
 	public String applySchemaNameSpecifications(String schemaName) {
 		return schemaName;
 	}
-	
+
 	public boolean isInMemory() {
 		return fIsInMemory;
 	}
-	
+
 	public String getDriverVendor() {
 		return fDriverVendor;
 	}
@@ -384,8 +378,8 @@
 		return fHibernateDialect;
 	}
 
-	public String getProductPlugins() {
-		return fProductPlugins;
+	public String getProductFeatures() {
+		return fProductFeatures;
 	}
 
 	public String getProductConfigurations() {
@@ -404,37 +398,35 @@
 		return fPersistenceBatchWriting;
 	}
 
-	public String jdbcUrl(String driverVendor, String driverType, String serverName, int serverPort, String databaseName, String jdbUrlFormat) {
-		if	((driverVendor == null) || driverVendor.trim().isEmpty()) {
+	public String jdbcUrl(String driverVendor, String driverType, String serverName, int serverPort,
+			String databaseName, String jdbUrlFormat) {
+		if ((driverVendor == null) || driverVendor.trim().isEmpty()) {
 			driverVendor = fDriverVendor; // NOSONAR
 		}
-		if	((driverType == null) || driverType.trim().isEmpty()) {
+		if ((driverType == null) || driverType.trim().isEmpty()) {
 			driverType = fDriverType; // NOSONAR
 		}
-		if	(serverName == null) {
+		if (serverName == null) {
 			serverName = "???"; // NOSONAR
 		}
-		if	(serverPort == 0) {
+		if (serverPort == 0) {
 			serverPort = -1; // NOSONAR
 		}
 		String format = ((jdbUrlFormat != null) && !jdbUrlFormat.isEmpty()) ? jdbUrlFormat : fJdbcUrlFormat;
 		String retcode = format // NOSONAR
-			.replaceAll(VARIABLE.VENDOR, 	driverVendor)
-			.replaceAll(VARIABLE.TYPE, 		driverType)
-			.replaceAll(VARIABLE.SERVER, 	serverName)
-			.replaceAll(VARIABLE.PORT, 		((Integer)serverPort).toString())
-			.replaceAll(VARIABLE.DATABASE, 	databaseName)
-			.replaceAll(VARIABLE.USERHOME, 	System.getProperty("user.home").replace(java.io.File.separator,"/"))
-			;
+				.replaceAll(VARIABLE.VENDOR, driverVendor).replaceAll(VARIABLE.TYPE, driverType)
+				.replaceAll(VARIABLE.SERVER, serverName).replaceAll(VARIABLE.PORT, ((Integer) serverPort).toString())
+				.replaceAll(VARIABLE.DATABASE, databaseName)
+				.replaceAll(VARIABLE.USERHOME, System.getProperty("user.home").replace(java.io.File.separator, "/"));
 		return retcode;
 	}
 
 	public boolean supportsPropertyKey(String key) {
-		if	(fPropertyKeys.isEmpty()) {
+		if (fPropertyKeys.isEmpty()) {
 			return true;
-		}
-		else {
+		} else {
 			return fPropertyKeys.contains(key);
 		}
 	}
+
 }
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/IProductConfigurationPrefs.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/IProductConfigurationPrefs.java
index 0c15276..ebe64d0 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/IProductConfigurationPrefs.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/IProductConfigurationPrefs.java
@@ -40,6 +40,8 @@
 	public abstract String getEuroXRefRatesURLDaily();
 
 	public abstract String getEuroXRefRatesURLPrevious();
+	
+	public abstract String getWelcomeScreen();
 
 	/**
 	 * @return name of the server running the ActiveMQ Broker Service.<br>Use {@link ProductConfiguration#isServerReasonable(String)} to check if the name is reasonable.
@@ -52,14 +54,6 @@
 
 	public abstract int getHybridRefresherMilliSecsInactive();
 
-//	public abstract String getDataSourceNameForAuthentication();
-//
-//	public abstract String getDataSourceNameForBLOB();
-//
-//	public abstract String getDataSourceNameForBPM();
-//
-//	public abstract String getDataSourceNameForBusinessData();
-
 	public abstract int getAuthRESTfulPort();
 
 	public abstract boolean hasAutoLogin();
@@ -110,10 +104,6 @@
 
 	public abstract boolean showLanguageSelectInRespectiveLocale();
 
-	public abstract String getLanguagesGoogleHttpReferrer();
-
-	public abstract String getLanguagesGoogleApiKey();
-
 	public abstract boolean hasToolsPrintService();
 
 	public abstract boolean hasDemoToolsTheme();
@@ -150,4 +140,9 @@
 	public abstract boolean isEmailUseSslOnConnect();
 
 	public abstract String getJavaPosConfiguration();
+
+	public abstract String getDatainterchangeConfiguration();
+	
+	public abstract boolean isMavenActivated();
+
 }
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/LocaleUtils.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/LocaleUtils.java
index 9f15a18..a5e9b9d 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/LocaleUtils.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/LocaleUtils.java
@@ -23,26 +23,19 @@
 	
 	/**
 	 * @param locale
-	 * @param displayByRespectiveLocale true, if the locale itself should be used to get the display name
 	 * @return the display name for the given locale
 	 */
-	public static String getDisplayName(Locale locale, boolean displayByRespectiveLocale) {
+	public static String getDisplayName(Locale locale) {
 
-		String displayName = displayByRespectiveLocale ?
-				locale.getDisplayLanguage(locale) :
-				locale.getDisplayLanguage();
+		String displayName = locale.getDisplayLanguage();
 
 		if (locale.getLanguage().length()>0 && locale.getCountry().length()>0){
 			
-			displayName = displayName + " " + ( displayByRespectiveLocale ? 
-				locale.getDisplayCountry(locale) :
-				locale.getDisplayCountry() );
+			displayName = displayName + " " + locale.getDisplayCountry();
 			
 			if (locale.getVariant().length()>0) {
 				
-				displayName = displayName + " " + ( displayByRespectiveLocale ? 
-					locale.getDisplayVariant(locale):
-					locale.getDisplayVariant() );
+				displayName = displayName + " " + locale.getDisplayVariant();
 			} 
 		}
 
@@ -51,13 +44,10 @@
 	
 	/**
 	 * @param locales the array of locales, that should be sorted
-	 * @param displayByRespectiveLocale true, if the locale itself should be used to get the display name for sorting
 	 */
-	public static void sortLocalesOnDisplayName(Locale[] locales, final boolean displayByRespectiveLocale) {
+	public static void sortLocalesOnDisplayName(Locale[] locales) {
 		Comparator<Locale> localeComparator = (locale1, locale2) -> {
-				String locale1Name = displayByRespectiveLocale ? locale1.getDisplayName(locale1) : locale1.getDisplayName();
-				String locale2Name = displayByRespectiveLocale ? locale2.getDisplayName(locale2) : locale2.getDisplayName();
-				return locale1Name.compareTo(locale2Name);
+				return locale1.getDisplayName().compareTo(locale2.getDisplayName());
 		};
 		Arrays.sort(locales, localeComparator);
 	}	
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/Preference.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/Preference.java
index 57830cb..e506461 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/Preference.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/Preference.java
@@ -45,10 +45,6 @@
 	BPM_ENGINE_HIBERNATE_MAX_FETCH_DEPTH,
 	DATASOURCES,
 	PRODUCTCONFIGURATION,
-//	DATASOURCE_AUTHENTICATION,
-//	DATASOURCE_BLOB,
-//	DATASOURCE_BPM,
-//	DATASOURCE_BUSINESSDATA,
 	DTO_REALM_PORTAL_ID,
 	EXCHANGE_RATES_EURO_BASED_DAILY,
 	EXCHANGE_RATES_EURO_BASED_PREVIOUS,
@@ -60,14 +56,12 @@
 	HYBRID_REFRESH_PERSPECTIVE_ACTIVE,
 	HYBRID_REFRESH_PERSPECTIVE_INACTIVE,
 	JAVA_POS_CONFIGURATION,
+	DATAINTERCHANGE_CONFIGURATION,
 	LDAP_CONTEXT_FACTORY_URL,
 	LDAP_REALM_PORTAL_ID,
 	LDAP_USER_DN_TEMPLATE,
 	LOCALIZATION_AUTOCREATE,
-//	LOCALIZATION_AUTOTRANSLATE,
 	LOCALIZATION_SHOW_SELECT_IN_RESPECTIVE_LOCALE,
-//	LOCALIZATION_GOOGLE_API_KEY,
-//	LOCALIZATION_GOOGLE_HTTP_REFERRER,
 	LOCALIZATION_SUPPORTED_LANGUAGES,
 	PERSISTENCE_UNITS,
 	DEMO_TOOLS_THEME,
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfiguration.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfiguration.java
index 3927ed5..634f5e9 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfiguration.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfiguration.java
@@ -39,10 +39,17 @@
 	private static final Logger LOGGER = LoggerFactory.getLogger(ProductConfiguration.class);
 	private static ProductConfigurationPrefs workspacePrefs = null;
 	private static ProductConfigurationPrefs activePrefs = null;
+	
+	private ProductConfiguration() {
+	}
 
 	public static ProductConfigurationPrefs workspacePrefs() {
 		if	(workspacePrefs == null) {
 			workspacePrefs = new ProductConfigurationPrefs(WORKSPACE_NAME, new ProductInstanceScope(), true, null);
+			if(workspacePrefs.getScopeContext() != null && workspacePrefs.getScopeContext().getLocation() != null) {
+				String msg = workspacePrefs.getScopeContext().getLocation().toOSString();
+				LOGGER.debug("ProductConfigurationFile: {}", msg);
+			}
 		}
 		return workspacePrefs;
 	}
@@ -68,12 +75,16 @@
 	 * @return  <ul><li><code>false</code>, if the server name or ip is defintively non-reasonable.</li><li><code>true</code> otherwise, but it <b>does not guarantee</b> an existing or reachable server name or ip address</li></ul>
 	 */
 	public static boolean isServerReasonable(String serverNameOrIp) {
-		if	(serverNameOrIp.contains("<") || serverNameOrIp.contains(">")) {
-			return false;
-		}
-		return true;
+		return !(serverNameOrIp.contains("<") || serverNameOrIp.contains(">"));
 	}
 	
+	public static String getWelcomeScreen() {
+		return prefs().getWelcomeScreen();
+	}
+
+	public static void setWelcomeScreen(String value) {
+		prefs().setWelcomeScreen(value);
+	}
 	/**
 	 * @see http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html
 	 * @return URL to server with the daily Euro Foreign Exchange Reference
@@ -127,34 +138,6 @@
 		return prefs().getDataSourceNames();
 	}
 
-//	/**
-//	 * @return the name of the bpm DataSource
-//	 */
-//	public static String getDataSourceNameForAuthentication() {
-//		return prefs().getDataSourceNameForAuthentication();
-//	}
-//
-//	/**
-//	 * @return the name of the bpm DataSource
-//	 */
-//	public static String getDataSourceNameForBLOB() {
-//		return prefs().getDataSourceNameForBLOB();
-//	}
-//
-//	/**
-//	 * @return the name of the bpm DataSource
-//	 */
-//	public static String getDataSourceNameForBPM() {
-//		return prefs().getDataSourceNameForBPM();
-//	}
-//
-//	/**
-//	 * @return the name of the active DataSource
-//	 */
-//	public static String getDataSourceNameForBusinessData() {
-//		return prefs().getDataSourceNameForBusinessData();
-//	}
-
 	/**
 	 * @param jndiName
 	 *            the requested DataSource
@@ -189,13 +172,6 @@
 	/**
 	 * @return list of name of all defined DataSources
 	 */
-//	public static Set<EnumDatabaseVendor> getNecessaryDataBaseVendors(Set<String> jndiNames) {
-//		return prefs().getNecessaryDataBaseVendors(jndiNames);
-//	}
-
-	/**
-	 * @return list of name of all defined DataSources
-	 */
 	public static Set<String> getPersistenceUnitNames() {
 		return prefs().getPersistenceUnitNames();
 	}
@@ -344,14 +320,6 @@
 		return prefs().showLanguageSelectInRespectiveLocale();
 	}
 
-	public static String getLanguagesGoogleHttpReferrer() {
-		return prefs().getLanguagesGoogleHttpReferrer();
-	}
-
-	public static String getLanguagesGoogleApiKey() {
-		return prefs().getLanguagesGoogleApiKey();
-	}
-	
 	/**
 	 * @param generator class of the requested mock data generator
 	 * @return either null, if no entry is set, or the timestamp as String
@@ -447,7 +415,15 @@
 		return prefs().isEmailUseSslOnConnect();
 	}
 
+	public static boolean isMavenActivated() {
+		return prefs().isMavenActivated();
+	}
+	
 	public static String getJavaPosConfiguration() {
 		return prefs().getJavaPosConfiguration();
 	}
+
+	public static String getDatainterchangeConfiguration() {
+		return prefs().getDatainterchangeConfiguration();
+	}
 }
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationDefaultPrefs.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationDefaultPrefs.java
index a992fd5..c7b0f28 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationDefaultPrefs.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationDefaultPrefs.java
@@ -12,6 +12,10 @@
  */
 package org.eclipse.osbp.preferences;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Locale;
@@ -28,7 +32,17 @@
  */
 public class ProductConfigurationDefaultPrefs implements IProductConfigurationPrefs {
 
-	public final static String BPM_ENGINE_PERSISTENCE_UNIT = "bpm";
+	public static final String MYSQL = "mysql";
+	public static final String ORACLE = "oracle";
+	public static final String PASSWORD_HINT = "<password>";		// NOSONAR
+	public static final String USERNAME_HINT = "<username>";
+	public static final String DATABASE_HINT = "<database>";
+	public static final String H2MEMORY = "H2MEMORY";
+	public static final String DERBYLOCALFILE = "DERBYLOCALFILE";
+	public static final String H2LOCALFILE = "H2LOCALFILE";
+	public static final String DERBYMEMORY = "DERBYMEMORY";
+	public static final String IP_OR_HOST = "<ip-or-host>";
+	public static final String BPM_ENGINE_PERSISTENCE_UNIT = "bpm";
 	
 	public String getBusinessBundleClassNameReadOnly() {
 		return "";
@@ -38,26 +52,26 @@
 	private Map<String, PersistenceUnitConfiguration> persistenceUnits = new HashMap<>();
 	
 	public ProductConfigurationDefaultPrefs() {
-		initializeIfNotExists ("oracle", "oracle", //ProductConfigurationPrefs.DATASOURCE_FOR_BUSINESSDATA,
-			EnumDatabaseVendor.ORACLE, "<ip-or-host>", 1521, "<database>", "<username>", "<password>");
+		initializeIfNotExists (ORACLE, ORACLE,
+			EnumDatabaseVendor.ORACLE, IP_OR_HOST, 1521, DATABASE_HINT, USERNAME_HINT, PASSWORD_HINT);
 		/* === datasource using a MySQL database === */
-		initializeIfNotExists ("mysql", null,
-			EnumDatabaseVendor.MYSQL, "<ip-or-host>", 3306, "<database>", "<username>", "");
+		initializeIfNotExists (MYSQL, null,
+			EnumDatabaseVendor.MYSQL, IP_OR_HOST, 3306, DATABASE_HINT, USERNAME_HINT, "");
 		/* === datasource using a H2 in-Memory database === */
 		initializeIfNotExists (ProductConfigurationPrefs.DEFAULT_H2MEMORY_DATASOURCE, null,
-			EnumDatabaseVendor.H2_IN_MEMORY, null, -1, "H2MEMORY", "H2MEMORY", "H2MEMORY"); // NOSONAR
+			EnumDatabaseVendor.H2_IN_MEMORY, null, -1, H2MEMORY, H2MEMORY, H2MEMORY); // NOSONAR
 		/* === datasource using a H2 local-file database === */
 		initializeIfNotExists (ProductConfigurationPrefs.DEFAULT_H2LOCALFILE_DATASOURCE, null,
-			EnumDatabaseVendor.H2_LOCAL_FILE, null, -1, "H2LOCALFILE", "H2LOCALFILE", "H2LOCALFILE");
+			EnumDatabaseVendor.H2_LOCAL_FILE, null, -1, H2LOCALFILE, H2LOCALFILE, H2LOCALFILE);
 		/* === datasource using a Derby in-Memory database === */
 		initializeIfNotExists (ProductConfigurationPrefs.DEFAULT_DERBYMEMORY_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_IN_MEMORY, null, -1, "DERBYMEMORY", "DERBYMEMORY", "DERBYMEMORY");
+			EnumDatabaseVendor.DERBY_IN_MEMORY, null, -1, DERBYMEMORY, DERBYMEMORY, DERBYMEMORY);
 		/* === datasource using a Derby local-file database === */
 		initializeIfNotExists (ProductConfigurationPrefs.DEFAULT_DERBYLOCALFILE_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_LOCAL_FILE, null, -1, "DERBYLOCALFILE", "DERBYLOCALFILE", "DERBYLOCALFILE");
+			EnumDatabaseVendor.DERBY_LOCAL_FILE, null, -1, DERBYLOCALFILE, DERBYLOCALFILE, DERBYLOCALFILE);
 		/* === datasource using a Derby database === */
 		initializeIfNotExists (ProductConfigurationPrefs.DEFAULT_DERBYSERVER_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_CLIENT, "<ip-or-host>", 1527, "<database>", "<username>", "<password>");
+			EnumDatabaseVendor.DERBY_CLIENT, IP_OR_HOST, 1527, DATABASE_HINT, USERNAME_HINT, PASSWORD_HINT);
 		
 		// --- generate reasonable default preferences for development product
 		initializeIfNotExists (ProductConfigurationPrefs.PERSISTENCE_UNIT_AUTHENTICATION,
@@ -86,11 +100,24 @@
 			PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
 	}
 	
-	private void initializeIfNotExists(
-			String dataSource, String dataSourceConsumer, EnumDatabaseVendor vendor,
+	private String readHTML() throws IOException {
+		StringBuilder builder = new StringBuilder();
+		URL url = getClass().getResource("welcome.html");
+		if (url != null) {
+			BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
+			while (reader.ready()) {
+				builder.append(reader.readLine());
+				builder.append("\n");
+			}
+			reader.close();
+		}
+		return builder.toString();
+	}
+
+	private void initializeIfNotExists(													// NOSONAR
+			String dataSource, String dataSourceConsumer, EnumDatabaseVendor vendor,	// NOSONAR
 			String serverName, int serverPort,
 			String database, String username, String password) {
-		String vendorName = vendor.name();
 		String driverVendor = vendor.getDriverVendor();
 		String driverType = vendor.getDriverType();
 		String driverClass = vendor.getDriverClass();
@@ -108,18 +135,19 @@
 		}
 	}
 	
-	private void initializeIfNotExists(String persistenceUnit,
+	private void initializeIfNotExists(String persistenceUnit,// NOSONAR
 		String dataSource, boolean deployOnStartup, boolean queryCache,
 		String batchWriting, int batchWritingSize, boolean cacheStatements, int cacheStatementsSize,
-		String loggingLevel, String dllGeneration, String xmlPath) { // NOSONAR
+		String loggingLevel, String dllGeneration, String xmlPath) { 
 		DataSourceConfiguration dataSourceConfiguration = dataSources.get(dataSource);
+		String bw = batchWriting;
 		if	((batchWriting == null) && (dataSourceConfiguration != null)) {
-			batchWriting = dataSourceConfiguration.getDefaultBatchWriting();
+			bw = dataSourceConfiguration.getDefaultBatchWriting();
 		}
 		PersistenceUnitConfiguration configuration = new PersistenceUnitConfiguration(
 				persistenceUnit,
 				dataSource, deployOnStartup,
-				queryCache, batchWriting, batchWritingSize,
+				queryCache, bw, batchWritingSize,
 				cacheStatements, cacheStatementsSize, loggingLevel,
 				dllGeneration, xmlPath, "static");
 		persistenceUnits.put(persistenceUnit, configuration);
@@ -130,7 +158,7 @@
 	 */
 	@Override
 	public String getBpmServerIp() {
-		return "127.0.0.1";
+		return "127.0.0.1";				// NOSONAR
 	}
 
 	/* (non-Javadoc)
@@ -149,6 +177,14 @@
 		return 10000;
 	}
 	
+	@Override
+	public String getWelcomeScreen() {
+		try {
+			return readHTML();
+		} catch (Exception e) {
+			return "";
+		}
+	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getEuroXRefRatesURLDaily()
 	 */
@@ -197,99 +233,6 @@
 		return 10000;
 	}
 
-//	public Collection<DataSourceConfiguration> getDataSources() {
-//		return dataSources.values();
-//	}
-
-//	public Set<String> getDataSourceNames() {
-//		return dataSources.keySet();
-//	}
-
-//	/* (non-Javadoc)
-//	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getDataSourceNameForAuthentication()
-//	 */
-//	@Override
-//	public String getDataSourceNameForAuthentication() {
-//		return ProductConfigurationPrefs.DEFAULT_DATASOURCE_FOR_AUTHENTICATION;
-//	}
-//
-//	/* (non-Javadoc)
-//	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getDataSourceNameForBLOB()
-//	 */
-//	@Override
-//	public String getDataSourceNameForBLOB() {
-//		return ProductConfigurationPrefs.DEFAULT_DATASOURCE_FOR_BLOB;
-//	}
-//
-//	/* (non-Javadoc)
-//	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getDataSourceNameForBPM()
-//	 */
-//	@Override
-//	public String getDataSourceNameForBPM() {
-//		return ProductConfigurationPrefs.DEFAULT_DATASOURCE_FOR_BPM;
-//	}
-//
-//	/* (non-Javadoc)
-//	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getDataSourceNameForBusinessData()
-//	 */
-//	@Override
-//	public String getDataSourceNameForBusinessData() {
-//		return ProductConfigurationPrefs.DEFAULT_DATASOURCE_FOR_BUSINESSDATA;
-//	}
-
-//	public Properties getDataSourceProperties(String jndiName) {
-//		DataSourceConfiguration jndi = getDataSource(jndiName);
-//		return (jndi == null) ? null : jndi.getDataSourceProperties();
-//	}
-
-//	public DataSourceConfiguration getDataSource(String jndiName) {
-//		return dataSources.get(jndiName);
-//	}
-	
-//	public String getDataSourceDriverClass(String jndiName) {
-//		DataSourceConfiguration jndi = dataSources.get(jndiName);
-//		return (jndi == null) ? null : jndi.getDriverClass();
-//	}
-
-//	public Properties getJpaProperties(String jndiName) {
-//		DataSourceConfiguration jndi = dataSources.get(jndiName);
-//		return (jndi == null) ? null : jndi.getJpaProperties();
-//	}
-
-//	public Collection<PersistenceUnitConfiguration> getPersistenceUnits() {
-//		return persistenceUnits.values();
-//	}
-
-//	public Set<String> getPersistenceUnitNames() {
-//		return persistenceUnits.keySet();
-//	}
-
-//	public String getPersistenceUnitJndiName(String persistenceUnitName) {
-//		return persistenceUnits.get(persistenceUnitName).getJndiName();
-//	}
-
-//	public String getPersistenceUnitSchemaName(String persistenceUnitName) {
-//		return persistenceUnits.get(persistenceUnitName).getSchemaName();
-//	}
-
-//	public String getPersistenceUnitHibernateDialect(String persistenceUnitName) {
-//		return getJndiNameHibernateDialect(getPersistenceUnitJndiName(persistenceUnitName));
-//	}
-
-//	public String getJndiNameHibernateDialect(String jndiName) {
-//		DataSourceConfiguration jndi = dataSources.get(jndiName);
-//		return (jndi == null) ? null : jndi.getDatabaseVendor().getHibernateDialect();
-//	}
-	
-//	public Properties getPersistenceUnitProperties(
-//			String persistenceUnitName, CommonDataSource dataSource, ClassLoader classLoader) {
-//		if (persistenceUnits.containsKey(persistenceUnitName)) {
-//			return persistenceUnits.get(persistenceUnitName)
-//					.getPersistenceUnitProperties(dataSource, classLoader);
-//		}
-//		return null;
-//	}
-
 	public final String getAuthenticationOrganizationId() {
 		return "FoodMart";
 	}
@@ -408,23 +351,6 @@
 		return true;
 	}
 
-//	public final String getShiroConfiguration(String staticRealmClassName) {
-//		String mainSection = "[main]" + IShiroConfiguration.INI_NEWLINE;
-//		String realms = "";
-//		if	(!shiros.containsKey(ProductConfiguration.SHIRO_STATIC_REALM)) {
-//			shiros.put(ProductConfiguration.SHIRO_STATIC_REALM, new StaticConfiguration(staticRealmClassName, 1));
-//		}
-//		for (String name : shiros.keySet()) {
-//			mainSection += shiros.get(name).getShiroConfiguration(name);
-//			if (!realms.isEmpty()) {
-//				realms += ",";
-//			}
-//			realms += "$" + name;
-//		}
-//		mainSection += "securityManager.realms = " + realms + IShiroConfiguration.INI_NEWLINE;
-//		return mainSection;
-//	}
-	
 	/* (non-Javadoc)
 	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getLanguages()
 	 */
@@ -477,22 +403,6 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getLanguagesGoogleHttpReferrer()
-	 */
-	@Override
-	public String getLanguagesGoogleHttpReferrer() {
-		return "";
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#getLanguagesGoogleApiKey()
-	 */
-	@Override
-	public String getLanguagesGoogleApiKey() {
-		return "";
-	}
-
-	/* (non-Javadoc)
 	 * @see org.eclipse.osbp.preferences.IProductConfigurationPrefs#hasDemoToolsTheme()
 	 */
 	@Override
@@ -588,4 +498,14 @@
 	public String getJavaPosConfiguration() {
 		return "";
 	}
+
+	@Override
+	public String getDatainterchangeConfiguration() {
+		return "";
+	}
+
+	@Override
+	public boolean isMavenActivated() {
+		return false;
+	}
 }
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationPrefs.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationPrefs.java
index a79db46..25a1998 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationPrefs.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductConfigurationPrefs.java
@@ -51,6 +51,7 @@
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
 import org.eclipse.core.runtime.preferences.IPreferenceNodeVisitor;
 import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.persistence.config.PersistenceUnitProperties;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
@@ -71,73 +72,6 @@
  */
 public class ProductConfigurationPrefs implements IProductConfigurationPrefs {
 
-	public static enum DDL_GENERATION {
-		CREATE 		("create-tables",			"create"),
-		DROP_CREATE	("drop-and-create-tables",	"create"),
-		UPDATE		("create-or-extend-tables",	"update"),
-		NONE		("none",					"validate");
-		
-		private final String eclipseLink;
-		private final String hibernate;
-		
-		private DDL_GENERATION(String eclipseLink, String hibernate) {
-			this.eclipseLink	= eclipseLink;
-			this.hibernate		= hibernate;
-		}
-		
-		public String eclipseLink() {
-			return eclipseLink;
-		}
-		
-		public String hibernate() {
-			return hibernate;
-		}
-		
-		public static String hibernate(String eclipseLink) {
-			for	(DDL_GENERATION step : values()) {
-				if	(step.eclipseLink.equals(eclipseLink)) {
-					return step.hibernate;
-				}
-			}
-			return NONE.hibernate;
-		}
-	}
-
-	public Set<EnumDatabaseVendor> getNecessaryDataBaseVendors() {
-		TreeSet<EnumDatabaseVendor> result = new TreeSet<EnumDatabaseVendor>();
-		for	(String pu : getPersistenceUnitNames()) {
-			addNecessaryDataBaseVendor(result, getPersistenceUnitJndiName(pu));
-		}
-		return result;
-	}
-
-	public Set<EnumDatabaseVendor> getNecessaryDataBaseVendors(String... jndiNames) {
-		TreeSet<EnumDatabaseVendor> result = new TreeSet<EnumDatabaseVendor>();
-		for	(String jndiName : jndiNames) {
-			addNecessaryDataBaseVendor(result, jndiName);
-		}
-		return result;
-	}
-
-//	public Set<EnumDatabaseVendor> getNecessaryDataBaseVendors(Collection<String> jndiNames) {
-//		return getNecessaryDataBaseVendors(jndiNames.toArray(new String[0]));
-//	}
-
-//	public Set<EnumDatabaseVendor> getNecessaryDataBaseVendors(String... jndiNames) {
-//		TreeSet<EnumDatabaseVendor> result = new TreeSet<EnumDatabaseVendor>();
-//		for	(String jndiName : jndiNames) {
-//			addNecessaryDataBaseVendor(result, jndiName);
-//		}
-//		return result;
-//	}
-
-	private void addNecessaryDataBaseVendor(TreeSet<EnumDatabaseVendor> result, String jndiName) {
-		DataSourceConfiguration ds = getDataSource(jndiName);
-		if	(ds != null) {
-			result.add(ds.getDatabaseVendor());
-		}
-	}
-	
 	/* ========================= variables =========================== */
 
 	private String businessBundleClassNameReadOnly;
@@ -153,7 +87,7 @@
 	private boolean noRememberMe = false;
 	private String adminEmail = "";
 	private String adminEmailUsername = "";
-	private String adminEmailPassword = "";
+	private String adminEmailPassword = ""; //NOSONAR
 	private String activeMqBrokerServerName;
 	private int activeMqBrokerServerPort;
 	private int hybridRefresherMilliSecsActive;
@@ -170,8 +104,6 @@
 	private boolean languagesAutocreate;
 	private boolean uomoMetricUnit;
 	private boolean showLanguageSelectInRespectiveLocale;
-	private String languagesGoogleHttpReferrer;
-	private String languagesGoogleApiKey;
 	private String bpmServerIp;
 	private int bpmServerPort;
 	private int bpmResponseTimeout;
@@ -184,10 +116,12 @@
 	private boolean demoToolsLanguage;
 	private boolean demoToolsPrintService;
 	private boolean projectWizardAbsoluteLocation;
+	private String welcomeScreen;
+	private boolean mavenActivated;
 
 	/* ========================= internal utilities =========================== */
 	
-	public static final String PREFERENCES_PATH = "/.metadata/.plugins/org.eclipse.core.runtime/"+EclipsePreferences.DEFAULT_PREFERENCES_DIRNAME+"/";
+	public static final String PREFERENCES_PATH = ".metadata/.plugins/org.eclipse.core.runtime/"+EclipsePreferences.DEFAULT_PREFERENCES_DIRNAME+"/";
 	public static final String PRODUCT_PREFERENCES = "org.eclipse.osbp.production";
 	public static final String PREFERENCES_FULL_PATH = PREFERENCES_PATH+PRODUCT_PREFERENCES+"."+EclipsePreferences.PREFS_FILE_EXTENSION;
 	
@@ -205,6 +139,7 @@
 	private Integer emailSmtpPort;
 	private Boolean emailUseSslOnConnect;
 	private String javaPosConfiguration;
+	private String datainterchangeConfiguration;
 
 	public static final String BUSINESS_BUNDLE_CLASS_NAME = "BUSINESS_BUNDLE_CLASS_NAME_read_only";
 	
@@ -230,6 +165,10 @@
 	
 	private static final String UOMOUNIT_METRIC = "uomoUnitMetric";
 	
+	/* ========================= welcomescreen initializer =========================== */
+	private static final String WELCOMESCREEN_NODE = "welcomeScreen";
+	private static final String WELCOMESCREEN_HTML = "html";
+	
 	/* ========================= xref rates initializer =========================== */
 	
 	private static final String EURO_X_REF_URL_NODE = "euroxrefurl";
@@ -240,6 +179,11 @@
 	
 	private static final String JAVA_POS_NODE = "javaPOS";
 	private static final String JAVA_POS_CONFIGURATION = "javaPosConfiguration";
+
+	/* ========================= Datainterchange initializer =========================== */
+	
+	private static final String DATAINTERCHANGE_NODE = "datainterchange";
+	private static final String DATAINTERCHANGE_CONFIGURATION = "datainterchangeConfiguration";
 	
 	/* ========================= authentication initializer =========================== */
 	
@@ -247,11 +191,11 @@
 	private static final String AUTH_RESTFUL_PORT = "authRESTfulPort";
 	private static final String AUTHENTICATION_AUTOLOGIN = "autoLogin";
 	private static final String AUTHENTICATION_ORGANIZATION_ID = "organizationId";
-	public static final String AUTHENTICATION_ENCRYPT_PASSWORDS = "encryptPasswords";
+	public static final String AUTHENTICATION_ENCRYPT_PASSWORDS = "encryptPasswords";	//NOSONAR
 	private static final String AUTHENTICATION_HIDE_REMEMBER_ME = "noRememberMe";
 	private static final String AUTHENTICATION_ADMIN_EMAIL_ACCOUNT = "adminEmail";
 	private static final String AUTHENTICATION_ADMIN_EMAIL_USERNAME = "adminEmailUsername";
-	private static final String AUTHENTICATION_ADMIN_EMAIL_PASSWORD = "adminEmailPassword";
+	private static final String AUTHENTICATION_ADMIN_EMAIL_PASSWORD = "adminEmailPassword";	//NOSONAR
 
 	/* ========================= email initializer =========================== */
 
@@ -298,7 +242,7 @@
 	public static final String DEFAULT_DERBYMEMORY_DATASOURCE = "derbymemory";
 	public static final String DEFAULT_DERBYSERVER_DATASOURCE = "derbyserver";
 
-	private static final String DEFAULT_INITIAL_DATASOURCE = "oracle"; // DEFAULT_H2MEMORY_DATASOURCE; // "oracle";
+	private static final String DEFAULT_INITIAL_DATASOURCE = "oracle";
 	
 	public static final String DEFAULT_DATASOURCE_FOR_AUTHENTICATION = DEFAULT_INITIAL_DATASOURCE;
 	public static final String DEFAULT_DATASOURCE_FOR_BLOB = DEFAULT_INITIAL_DATASOURCE;
@@ -306,10 +250,6 @@
 	public static final String DEFAULT_DATASOURCE_FOR_BUSINESSDATA = DEFAULT_INITIAL_DATASOURCE;
 	
 	private static final String DATASOURCE_NODE = "datasource";
-//	public static final String DATASOURCE_FOR_AUTHENTICATION = "datasource.authentication";
-//	public static final String DATASOURCE_FOR_BLOB = "datasource.blob";
-//	public static final String DATASOURCE_FOR_BPM = "datasource.bpm";
-//	public static final String DATASOURCE_FOR_BUSINESSDATA = "datasource.businessdata";
 	private static final String DATASOURCE_ENUM_ITEM = "enum.item";
 	private static final String DATASOURCE_DRIVER_VENDOR = "driver.vendor";
 	private static final String DATASOURCE_DRIVER_TYPE = "driver.type";
@@ -352,12 +292,6 @@
 	private static final String PERSISTENCE_PERSISTENCEXMLPATH = "persistenceXMLPath";
 	private static final String PERSISTENCE_WEAVING = "weaving";
 
-	/* ========================= image bundle initializer =========================== */
-	
-	private static final String IMAGES_NODE = "images";
-	private static final String IMAGES_BUNDLE_ID = "bundle.id";
-	private static final String IMAGES_RELATIVE_PATH = "relative.path";
-
 	/* ========================= mock data generator initializer =========================== */
 	
 	private static final String MOCK_DATA_GENERATORS_DONE = "mockDataGeneratorsDone";
@@ -371,7 +305,64 @@
 	private static final String DEMO_TOOLS_STRATEGY = "demoToolsStrategy";
 	private static final String DEMO_TOOLS_LANGUAGE = "demoToolsLanguage";
 	private static final String DEMO_TOOLS_PRINTSERVICE = "toolsPrintService";
+	/* ========================= maven settings initializer =========================== */
+	private static final String MAVEN_ACTIVATED = "mavenActivated";
 
+	public static enum DDL_GENERATION {
+		CREATE 		("create-tables",			"create"),
+		DROP_CREATE	("drop-and-create-tables",	"create"),
+		UPDATE		("create-or-extend-tables",	"update"),
+		NONE		("none",					"validate");
+		
+		private final String eclipseLink;
+		private final String hibernate;
+		
+		private DDL_GENERATION(String eclipseLink, String hibernate) {
+			this.eclipseLink	= eclipseLink;
+			this.hibernate		= hibernate;
+		}
+		
+		public String eclipseLink() {
+			return eclipseLink;
+		}
+		
+		public String hibernate() {
+			return hibernate;
+		}
+		
+		public static String hibernate(String eclipseLink) {
+			for	(DDL_GENERATION step : values()) {
+				if	(step.eclipseLink.equals(eclipseLink)) {
+					return step.hibernate;
+				}
+			}
+			return NONE.hibernate;
+		}
+	}
+
+	public Set<EnumDatabaseVendor> getDataBaseVendors() {
+		TreeSet<EnumDatabaseVendor> result = new TreeSet<EnumDatabaseVendor>();
+		for	(String pu : getPersistenceUnitNames()) {
+			addDataBaseVendor(result, getPersistenceUnitJndiName(pu));
+		}
+		return result;
+	}
+
+	public Set<EnumDatabaseVendor> getDataBaseVendors(String... jndiNames) {
+		TreeSet<EnumDatabaseVendor> result = new TreeSet<EnumDatabaseVendor>();
+		for	(String jndiName : jndiNames) {
+			addDataBaseVendor(result, jndiName);
+		}
+		return result;
+	}
+
+	private void addDataBaseVendor(TreeSet<EnumDatabaseVendor> result, String jndiName) {
+		DataSourceConfiguration ds = getDataSource(jndiName);
+		if	(ds != null) {
+			result.add(ds.getDatabaseVendor());
+		}
+	}
+	
 	public ProductConfigurationPrefs(String name, IScopeContext scopeContext, boolean watchRegister, IProject project) {
 		defaultPrefs = new ProductConfigurationDefaultPrefs();
 		this.scopeContext = scopeContext;
@@ -391,6 +382,10 @@
 		LOGGER.trace(getInformation()+" # constructed");
 	}
 	
+	public IScopeContext getScopeContext() {
+		return scopeContext;
+	}
+
 	public ProductConfigurationPrefs(String name, IScopeContext scopeContext, IProject project) {
 		this(name, scopeContext, false, project);
 	}
@@ -450,7 +445,7 @@
 	}
 	
 	public static IResource getPrefsFile(IProject project) {
-		IResource prefsFile = project.findMember(PREFERENCES_FULL_PATH);
+		IResource prefsFile = null;
 		try {
 			for (IResource resource : project.members()) {
 				if	((resource instanceof IFile) && "product".equals(resource.getFileExtension())) {
@@ -458,6 +453,10 @@
 						String[] tokens = IOUtils.toString(((IFile)resource).getContents()).split("-DproductConfigurationFile=");
 						if	(tokens.length > 1) {
 							String filePath = tokens[1].replace('\r', ' ').replace('\n', ' ').replace('\t', ' ').split(" ")[0].replace("DEFAULTFILE", PREFERENCES_FULL_PATH);
+							// The following line is required to perform a string substitution. 
+							// In case of having a file path with placeholders this will replace them with the defined string in the eclipse string substitution preferences:
+							// Reference > Preferences > Run/Debug > String Substitution
+							filePath = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(filePath);
 							File handle = new File(filePath); 
 							if	(handle.exists()) {
 							    String fileName = handle.getAbsolutePath();
@@ -471,6 +470,7 @@
 							    	}
 							    }
 							    catch (Exception e) { // NOSONAR
+							    	e.printStackTrace();
 							    } // NOSONAR
 							}
 						}
@@ -494,6 +494,11 @@
 
 	/* ========================= getters =========================== */
 
+	public String getWelcomeScreen() {
+		initialize();
+		return welcomeScreen;
+	}
+	
 	/**
 	 * @see http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html
 	 * @return URL to server with the daily Euro Foreign Exchange Reference
@@ -668,7 +673,13 @@
 	 */
 	public String getPersistenceUnitJndiName(String persistenceUnitName) {
 		initialize();
-		return persistenceUnits.get(persistenceUnitName).getJndiName();
+		PersistenceUnitConfiguration puConfig = persistenceUnits.get(persistenceUnitName);
+		if (puConfig!=null){
+			return puConfig.getJndiName();
+		} else {
+			LOGGER.error("No persistence unit named '" + persistenceUnitName + "' found. Check the defined persistence unit of your entity.");
+			return null;
+		}
 	}
 
 	public String getPersistenceUnitHibernateDialect(String persistenceUnitName) {
@@ -794,7 +805,9 @@
 		initialize();
 		try {
 			LdapConfiguration configuration = (LdapConfiguration) getShiroRealmConfiguration(SHIRO_LDAP_REALM);
-			return configuration.getUrl();
+			if(configuration != null) {
+				return configuration.getUrl();
+			}
 		}	
 		catch (Exception e) { // NOSONAR
 			e.printStackTrace(); // NOSONAR
@@ -806,7 +819,9 @@
 		initialize();
 		try {
 			LdapConfiguration configuration = (LdapConfiguration) getShiroRealmConfiguration(SHIRO_LDAP_REALM);
-			return configuration.getTemplate();
+			if(configuration != null) {
+				return configuration.getTemplate();
+			}
 		}	
 		catch (Exception e) { // NOSONAR
 			e.printStackTrace(); // NOSONAR
@@ -933,16 +948,6 @@
 		return showLanguageSelectInRespectiveLocale;
 	}
 
-	public String getLanguagesGoogleHttpReferrer() {
-		initialize();
-		return languagesGoogleHttpReferrer;
-	}
-
-	public String getLanguagesGoogleApiKey() {
-		initialize();
-		return languagesGoogleApiKey;
-	}
-
 	/**
 	 * @return show theme tool control if true
 	 */
@@ -985,6 +990,11 @@
 	
 	/* ========================= setters =========================== */
 
+	public void setWelcomeScreen(String welcomeScreen) {
+		this.welcomeScreen = put(WELCOMESCREEN_NODE, WELCOMESCREEN_HTML,
+				welcomeScreen);
+	}
+	
 	public void setEuroForeignExchangeReferenceRatesURLDaily(
 			String euroForeignExchangeReferenceRatesURLDaily) {
 		this.euroForeignExchangeReferenceRatesURLDaily = put(EURO_X_REF_URL_NODE, EURO_X_REF_URL_DAILY,
@@ -1114,22 +1124,6 @@
 		}
 	}
 
-//	public void setDataSourceForAuthentication(String dataSource) {
-//		this.dataSourceForAuthentication = put((String)null, DATASOURCE_FOR_AUTHENTICATION, dataSource);
-//	}
-//
-//	public void setDataSourceForBLOB(String dataSource) {
-//		this.dataSourceForBLOB = put((String)null, DATASOURCE_FOR_BLOB, dataSource);
-//	}
-//
-//	public void setDataSourceForBPM(String dataSource) {
-//		this.dataSourceForBPM = put((String)null, DATASOURCE_FOR_BPM, dataSource);
-//	}
-//
-//	public void setDataSourceForBusinessData(String dataSource) {
-//		this.dataSourceForBusinessData = put((String)null, DATASOURCE_FOR_BUSINESSDATA, dataSource);
-//	}
-
 	public void setDataSources(Map<String, DataSourceConfiguration> dataSources) {
 		forceReloadConfiguration();
 		this.dataSources = dataSources;
@@ -1197,8 +1191,16 @@
 					index++;
 					Preferences language = languagesNode.node(Integer.toString(index));
 					put(language, LANGUAGES_LANGUAGE, locale.getLanguage());
-					put(language, LANGUAGES_COUNTRY,  locale.getCountry());
-					put(language, LANGUAGES_VARIANT,  locale.getVariant());
+					if(locale.getCountry().length() > 0) {
+						put(language, LANGUAGES_COUNTRY,  locale.getCountry());
+					} else {
+						put(language, LANGUAGES_COUNTRY, "");
+					}
+					if(locale.getVariant().length() > 0) {
+						put(language, LANGUAGES_VARIANT,  locale.getVariant());
+					} else {
+						put(language, LANGUAGES_VARIANT, "");
+					}
 				}
 				languagesNode.flush();
 			}
@@ -1227,16 +1229,6 @@
 				showLanguageSelectInRespectiveLocale);
 	}
 
-	public void setLanguagesGoogleHttpReferrer(
-			String languagesGoogleHttpReferrer) {
-		this.languagesGoogleHttpReferrer = put((String)null, LANGUAGES_GOOGLE_HTTP_REFERRER,
-				languagesGoogleHttpReferrer);
-	}
-
-	public void setLanguagesGoogleApiKey(String languagesGoogleApiKey) {
-		this.languagesGoogleApiKey = put((String)null, LANGUAGES_GOOGLE_API_KEY, languagesGoogleApiKey);
-	}
-
 	public String getBusinessBundleClassNameReadOnly() {
 		initialize();
 		return businessBundleClassNameReadOnly;
@@ -1500,7 +1492,7 @@
 	 * @return either null, if no entry is set, or the timestamp as String
 	 */
 	public String isMockDataGeneratorDone(Object generator) {
-		return getMockDataGeneratorsDoneNode().get(mockDataGeneratorToKey(generator), null);
+		return getMockDataGeneratorsDoneNode().get(mockDataGeneratorToKey(generator), "");
 	}
 	
 	public void setMockDataGeneratorDone(Object generator) {
@@ -1577,7 +1569,12 @@
 				exceptions.add(e);
 			}
 			try {
-				initializeJavPOS();
+				initializeJavaPOS();
+			} catch (Exception e) {
+				exceptions.add(e);
+			}
+			try {
+				initializeDatainterchange();
 			} catch (Exception e) {
 				exceptions.add(e);
 			}
@@ -1602,10 +1599,20 @@
 				exceptions.add(e);
 			}
 			try {
+				initializeMavenActivated();
+			} catch (Exception e) {
+				exceptions.add(e);
+			}
+			try {
 				initializeProjectWizard();
 			} catch (Exception e) {
 				exceptions.add(e);
 			}
+			try {
+				initializeWelcomeScreen();
+			} catch (Exception e) {
+				exceptions.add(e);
+			}
 			if (!exceptions.isEmpty()) {
 				Exception e = new ConfigurationException(exceptions);
 				LOGGER.error("exceptions caught while reading configuration", e);
@@ -1617,6 +1624,11 @@
 	}
 
 
+	private void initializeMavenActivated() {
+		Preferences root = getProductPreferences();
+		mavenActivated = root.getBoolean(MAVEN_ACTIVATED, defaultPrefs.isMavenActivated());
+	}
+
 	private void initializeLanguages() throws Exception {
 		Preferences root = getProductPreferences();
 		int languagesSupported = root.getInt(LANGUAGES_SUPPORTED, 0);
@@ -1628,8 +1640,6 @@
 		languagesAutotranslate = root.getBoolean(LANGUAGES_AUTOTRANSLATE, defaultPrefs.isLanguagesAutotranslate());
 		languagesAutocreate = root.getBoolean(LANGUAGES_AUTOCREATE, defaultPrefs.willLanguagesAutocreate());
 		showLanguageSelectInRespectiveLocale = root.getBoolean(LANGUAGES_SHOW_SELECT_IN_RESPECTIVE_LOCALE, defaultPrefs.showLanguageSelectInRespectiveLocale());
-		languagesGoogleHttpReferrer = root.get(LANGUAGES_GOOGLE_HTTP_REFERRER, defaultPrefs.getLanguagesGoogleHttpReferrer());
-		languagesGoogleApiKey = root.get(LANGUAGES_GOOGLE_API_KEY, defaultPrefs.getLanguagesGoogleApiKey());
 		languagesSupported = root.getInt(LANGUAGES_SUPPORTED, 0);
 		for (int i = 0; i < languagesSupported; i++) {
 			Preferences language = languagesNode.node(Integer.toString(i + 1));
@@ -1662,6 +1672,12 @@
 		uomoMetricUnit = uomounitsNode.getBoolean(UOMOUNIT_METRIC, defaultPrefs.isUomoMetricUnit());
 	}
 
+	private void initializeWelcomeScreen() throws Exception {
+		Preferences welcomeNode = getProductPreferencesNode(WELCOMESCREEN_NODE);
+		// --- read all preferences ---
+		welcomeScreen = welcomeNode.get(WELCOMESCREEN_HTML, defaultPrefs.getWelcomeScreen());
+	}
+	
 	private void initializeEuroXRefRates() throws Exception {
 		Preferences euroXRefURL = getProductPreferencesNode(EURO_X_REF_URL_NODE);
 		// --- read all preferences ---
@@ -1669,12 +1685,18 @@
 		euroForeignExchangeReferenceRatesURLPrevious = euroXRefURL.get(EURO_X_REF_URL_PREVIOUS, defaultPrefs.getEuroXRefRatesURLPrevious());
 	}
 
-	private void initializeJavPOS() throws Exception {
+	private void initializeJavaPOS() throws Exception {
 		Preferences javaPos = getProductPreferencesNode(JAVA_POS_NODE);
 		// --- read all preferences ---
 		javaPosConfiguration = javaPos.get(JAVA_POS_CONFIGURATION, defaultPrefs.getJavaPosConfiguration());
 	}
 
+	private void initializeDatainterchange() throws Exception {
+		Preferences datainterchange = getProductPreferencesNode(DATAINTERCHANGE_NODE);
+		// --- read all preferences ---
+		datainterchangeConfiguration = datainterchange.get(DATAINTERCHANGE_CONFIGURATION, defaultPrefs.getDatainterchangeConfiguration());
+	}
+	
 	private void initializeReadOnly() throws Exception {
 		Preferences readOnly = getProductPreferences();
 		businessBundleClassNameReadOnly = readOnly.get(BUSINESS_BUNDLE_CLASS_NAME, "");
@@ -1784,41 +1806,28 @@
 	private void initializeDataSources() throws Exception {
 		Preferences root = getProductPreferences();
 		Preferences dataSourcesPrefs = getProductPreferencesNode(DATASOURCE_NODE);
+		
 		/* === datasource using a Oracle database === */
-		initializeIfNotExists (root, dataSourcesPrefs, "oracle", "oracle", //DATASOURCE_FOR_BUSINESSDATA,
-			EnumDatabaseVendor.ORACLE, "<ip-or-host>", 1521, "<database>", "<username>", "<password>"); // NOSONAR
+		initializeIfNotExists (root, dataSourcesPrefs, ProductConfigurationDefaultPrefs.ORACLE, ProductConfigurationDefaultPrefs.ORACLE, 
+			EnumDatabaseVendor.ORACLE, ProductConfigurationDefaultPrefs.IP_OR_HOST, 1521, ProductConfigurationDefaultPrefs.DATABASE_HINT, ProductConfigurationDefaultPrefs.USERNAME_HINT, ProductConfigurationDefaultPrefs.PASSWORD_HINT);
 		/* === datasource using a MySQL database === */
-		initializeIfNotExists (root, dataSourcesPrefs, "mysql", null,
-			EnumDatabaseVendor.MYSQL, "<ip-or-host>", 3306, "<database>", "<username>", "");
+		initializeIfNotExists (root, dataSourcesPrefs, ProductConfigurationDefaultPrefs.MYSQL, null,
+			EnumDatabaseVendor.MYSQL, "<ip-or-host>", 3306, ProductConfigurationDefaultPrefs.DATABASE_HINT, ProductConfigurationDefaultPrefs.USERNAME_HINT, "");
 		/* === datasource using a H2 in-Memory database === */
 		initializeIfNotExists (root, dataSourcesPrefs, DEFAULT_H2MEMORY_DATASOURCE, null,
-			EnumDatabaseVendor.H2_IN_MEMORY, null, -1, "H2MEMORY", "H2MEMORY", "H2MEMORY"); // NOSONAR
+			EnumDatabaseVendor.H2_IN_MEMORY, null, -1, ProductConfigurationDefaultPrefs.H2MEMORY, ProductConfigurationDefaultPrefs.H2MEMORY, ProductConfigurationDefaultPrefs.H2MEMORY); // NOSONAR
 		/* === datasource using a H2 local-file database === */
 		initializeIfNotExists (root, dataSourcesPrefs, DEFAULT_H2LOCALFILE_DATASOURCE, null,
-			EnumDatabaseVendor.H2_LOCAL_FILE, null, -1, "H2LOCALFILE", "H2LOCALFILE", "H2LOCALFILE");
+			EnumDatabaseVendor.H2_LOCAL_FILE, null, -1, ProductConfigurationDefaultPrefs.H2LOCALFILE, ProductConfigurationDefaultPrefs.H2LOCALFILE, ProductConfigurationDefaultPrefs.H2LOCALFILE);
 		/* === datasource using a Derby in-Memory database === */
 		initializeIfNotExists (root, dataSourcesPrefs, DEFAULT_DERBYMEMORY_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_IN_MEMORY, null, -1, "DERBYMEMORY", "DERBYMEMORY", "DERBYMEMORY");
+			EnumDatabaseVendor.DERBY_IN_MEMORY, null, -1, ProductConfigurationDefaultPrefs.DERBYMEMORY, ProductConfigurationDefaultPrefs.DERBYMEMORY, ProductConfigurationDefaultPrefs.DERBYMEMORY);
 		/* === datasource using a Derby local-file database === */
 		initializeIfNotExists (root, dataSourcesPrefs, DEFAULT_DERBYLOCALFILE_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_LOCAL_FILE, null, -1, "DERBYLOCALFILE", "DERBYLOCALFILE", "DERBYLOCALFILE");
+			EnumDatabaseVendor.DERBY_LOCAL_FILE, null, -1, ProductConfigurationDefaultPrefs.DERBYLOCALFILE, ProductConfigurationDefaultPrefs.DERBYLOCALFILE, ProductConfigurationDefaultPrefs.DERBYLOCALFILE);
 		/* === datasource using a Derby database === */
 		initializeIfNotExists (root, dataSourcesPrefs, DEFAULT_DERBYSERVER_DATASOURCE, null,
-			EnumDatabaseVendor.DERBY_CLIENT, "<ip-or-host>", 1527, "<database>", "<username>", "<password>");
-		/*
-		// http://www.hsqldb.org/doc/1.8/guide/guide.html#N106CC
-		initializeIfNotExists (root, dataSourcesPrefs, "hsqldbmemory", null,
-			EnumDatabaseVendor.HSQLDB_IN_MEMORY, null, -1, "PUBLIC", "SA", "");
-		initializeIfNotExists (root, dataSourcesPrefs, "hsqldblocalfile", null,
-			EnumDatabaseVendor.HSQLDB_LOCAL_FILE, null, -1, "PUBLIC", "SA", "");
-		*/
-		// TODO ... QUICK FIX ---
-		
-		// --- read all preferences ---
-//		dataSourceForAuthentication = root.get(DATASOURCE_FOR_AUTHENTICATION, defaultPrefs.getDataSourceNameForAuthentication());
-//		dataSourceForBLOB = root.get(DATASOURCE_FOR_BLOB, defaultPrefs.getDataSourceNameForBLOB());
-//		dataSourceForBPM = root.get(DATASOURCE_FOR_BPM, defaultPrefs.getDataSourceNameForBPM());
-//		dataSourceForBusinessData = root.get(DATASOURCE_FOR_BUSINESSDATA, defaultPrefs.getDataSourceNameForBusinessData());
+			EnumDatabaseVendor.DERBY_CLIENT, ProductConfigurationDefaultPrefs.IP_OR_HOST, 1527, ProductConfigurationDefaultPrefs.DATABASE_HINT, ProductConfigurationDefaultPrefs.USERNAME_HINT, ProductConfigurationDefaultPrefs.PASSWORD_HINT);
 		for (String dataSourceName : dataSourcesPrefs.childrenNames()) {
 			Preferences dataSource = dataSourcesPrefs.node(dataSourceName);
 			String vendorName = dataSource.get(DATASOURCE_ENUM_ITEM, "");
@@ -2056,4 +2065,19 @@
 	public String getJavaPosConfiguration() {
 		return javaPosConfiguration;
 	}
+
+	public void setDatainterchangeConfiguration(String value) {
+		this.datainterchangeConfiguration = put(DATAINTERCHANGE_NODE, DATAINTERCHANGE_CONFIGURATION, value);
+	}
+	
+	@Override
+	public String getDatainterchangeConfiguration() {
+		return datainterchangeConfiguration;
+	}
+
+	@Override
+	public boolean isMavenActivated() {
+		initialize();
+		return mavenActivated;
+	}
 }
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileBase.java b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileBase.java
index ed569f1..d660917 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileBase.java
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileBase.java
@@ -78,14 +78,14 @@
 	}
 
 	/** set of necessary data base vendors defined by the product preferences */
-	protected final Set<EnumDatabaseVendor> necessaryDataBaseVendors;
+	protected final Set<EnumDatabaseVendor> dataBaseVendors;
 	
 	public ProductFileBase(ProductConfigurationPrefs prefs) {
-		necessaryDataBaseVendors = prefs.getNecessaryDataBaseVendors();
+		dataBaseVendors = prefs.getDataBaseVendors();
 	}
 	
 	public ProductFileBase(ProductConfigurationPrefs prefs, String... jndiNames) {
-		necessaryDataBaseVendors = prefs.getNecessaryDataBaseVendors(jndiNames);
+		dataBaseVendors = prefs.getDataBaseVendors(jndiNames);
 	}
 	
 	@Override
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileConfigurations.xtend b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileConfigurations.xtend
index 636b0ef..a1d59a6 100644
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileConfigurations.xtend
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileConfigurations.xtend
@@ -39,20 +39,19 @@
 	override getRequiredAsString() {
 		prepareSerialized(
 		'''
-${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}
+      ${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}
       <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.e4.ui.services" autoStart="false" startLevel="1" />
       <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
       <plugin id="org.eclipse.equinox.coordinator" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="1" />
       <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="0" />
+      <plugin id="org.eclipse.gemini.naming" autoStart="true" startLevel="3" />
       <plugin id="org.eclipse.osbp.dsl.dto.lib" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.osbp.dsl.metadata.service" autoStart="true" startLevel="3" />
       <plugin id="org.eclipse.osbp.ecview.extension.strategy" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.osbp.ecview.jetty.manager" autoStart="true" startLevel="0" />
-      <plugin id="org.eclipse.osbp.fork.gemini.naming" autoStart="true" startLevel="3" />
       <plugin id="org.eclipse.osbp.osgi.hybrid.api" autoStart="true" startLevel="0" />
-      <plugin id="org.eclipse.osbp.persistence" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.osbp.runtime.ecore.bundlespace" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.osbp.runtime.event" autoStart="true" startLevel="0" />
       <plugin id="org.eclipse.osbp.runtime.jsr303.validation" autoStart="true" startLevel="4" />
@@ -73,11 +72,7 @@
 		removeDuplicates(asString
 			.replace(
 				"${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}",
-				EnumDatabaseVendor.getNecessaryConfigurations(necessaryDataBaseVendors)
-			)
-			.replace(
-				"${{UNNECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}",
-				EnumDatabaseVendor.getUnnecessaryConfigurations(necessaryDataBaseVendors)
+				EnumDatabaseVendor.getNecessaryConfigurations(dataBaseVendors)
 			)
 		)
 	}
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileFeatures.xtend b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileFeatures.xtend
new file mode 100644
index 0000000..e1b8ef8
--- /dev/null
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFileFeatures.xtend
@@ -0,0 +1,82 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * 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:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
+ */
+package org.eclipse.osbp.preferences
+
+import org.eclipse.core.runtime.IBundleGroupProvider
+import org.eclipse.core.runtime.Platform
+
+/**
+ * &lt;plugins&gt; dependencies for the OSBP product bundle <code>*.product</code> file.
+ */
+public class ProductFileFeatures extends ProductFileBase {
+	
+	new(ProductConfigurationPrefs prefs) {
+		super(prefs)
+	}
+		
+	new(ProductConfigurationPrefs prefs, String... jndiNames) {
+		super(prefs, jndiNames)
+	}
+	
+	override getDeprecatedAsString() {
+	}
+	
+	/**
+	 * Creates the list of used plugins for the .product file in the product targetbundle.
+	 */
+	override getRequiredAsString() {
+		prepareSerialized(
+		'''
+       ${{DATA_BASE_VENDOR_FEATURES}}
+       «runtimeSoftwareFeature»
+		''')
+	}
+	
+	override getRecommendedAsString() {
+	}
+	
+	override prepareSerialized(String asString) {
+		removeDuplicates(asString
+			.replace(
+				"${{DATA_BASE_VENDOR_FEATURES}}",
+				EnumDatabaseVendor.getDatabaseFeatures(dataBaseVendors)
+			)
+		)
+	}
+	
+	
+	def private String getRuntimeSoftwareFeature(){
+		var netOsbee = false
+		var orgOsbee = false
+		for (IBundleGroupProvider provider : Platform.getBundleGroupProviders()) {
+			for (feature : provider.getBundleGroups()) {
+				var featureId = feature.getIdentifier()
+				if (featureId !== null) {
+					if (featureId.startsWith("net.osbee")) {
+						netOsbee = true
+					} else if (featureId.startsWith("org.osbee")) {
+						orgOsbee = true
+					}
+				}
+			}
+		}
+		if (netOsbee){
+		 	return "\t<feature id=\"net.osbee.softwarefactory.runtime.feature\"/>"
+		} else if (orgOsbee){
+			return "\t<feature id=\"org.osbee.softwarefactory.runtime.feature\"/>"
+		}
+		return "\t<feature id=\"org.eclipse.osbp.softwarefactory.runtime.feature\"/>";
+	}
+}
+		
+	
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFilePlugins.xtend b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFilePlugins.xtend
deleted file mode 100644
index 033151a..0000000
--- a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/ProductFilePlugins.xtend
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- *                                                                            
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *                                                                            
- * 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:   
- * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
- */
-package org.eclipse.osbp.preferences
-
-/**
- * &lt;plugins&gt; dependencies for the OSBP product bundle <code>*.product</code> file.
- */
-public class ProductFilePlugins extends ProductFileBase {
-	
-	new(ProductConfigurationPrefs prefs) {
-		super(prefs)
-	}
-		
-	new(ProductConfigurationPrefs prefs, String... jndiNames) {
-		super(prefs, jndiNames)
-	}
-	
-	override getDeprecatedAsString() {
-		prepareSerialized(
-		'''
-${{UNNECESSARY_DATA_BASE_VENDOR_PLUGINS}}
-        <plugin id="com.google.protobuf"/>
-        <plugin id="com.springsource.javax.jms"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.common"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.common.edit"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.dto"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.entity"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.entity.edit"/>
-		<plugin id="org.eclipse.osbp.dsl.semantic.service"/>
-		<plugin id="org.eclipse.osbp.ecview.vaadin.servlet.mobile"/>
-		<plugin id="org.eclipse.osbp.mobile.vaadin.touchkit.osgi"/>
-		<plugin id="org.eclipse.osbp.utils.mobile.ui"/>
-        <plugin id="org.eclipse.osbp.vaaclipse.vaadin.addon.contextmenu"/>
-        <plugin id="org.eclipse.osbp.vaaclipse.vaadin.addon.dndlayout"/>
-		''')
-	}
-	
-	override getRequiredAsString() {
-		prepareSerialized(
-		'''
-      <plugin id="OpenCSV"/>
-      <plugin id="activemq-all-osgi-5.9.0"/>
-      <plugin id="animator.osgi"/>
-      <plugin id="ca.ecliptical.pde.ds.lib"/>
-      <plugin id="ch.qos.logback.classic"/>
-      <plugin id="ch.qos.logback.core"/>
-      <plugin id="ch.qos.logback.slf4j" fragment="true"/>
-      <plugin id="com.google.api.translate.osgi"/>
-      <plugin id="com.google.guava"/>
-      <plugin id="com.google.gwt.thirdparty.guava"/>
-      <plugin id="com.google.gwt.thirdparty.streamhtmlparser"/>
-      <plugin id="com.google.inject"/>
-      <plugin id="com.google.inject.assistedinject" fragment="true"/>
-      <plugin id="com.ibm.icu"/>
-      <plugin id="com.jcraft.jsch"/>
-      <plugin id="com.lowagie.text"/>
-      <plugin id="javax.jms"/>
-      <plugin id="com.springsource.org.antlr.runtime"/>
-      <plugin id="com.springsource.org.codehaus.commons.compiler"/>
-      <plugin id="com.springsource.org.codehaus.janino"/>
-      <plugin id="com.sun.mail.javax.mail"/>
-      <plugin id="com.vaadin.client"/>
-      <plugin id="com.vaadin.client-compiled"/>
-      <plugin id="com.vaadin.external.atmosphere.runtime"/>
-      <plugin id="com.vaadin.external.org.slf4j"/>
-      <plugin id="com.vaadin.push"/>
-      <plugin id="com.vaadin.sass-compiler"/>
-      <plugin id="com.vaadin.server"/>
-      <plugin id="com.vaadin.shared"/>
-      <plugin id="com.vaadin.theme-compiler"/>
-      <plugin id="com.vaadin.themes"/>
-      <plugin id="commons-vfs-osgi"/>
-      <plugin id="contextmenu.osgi"/>
-      <plugin id="dCharts.osgi"/>
-      <plugin id="dragdroplayouts.osgi"/>
-      <plugin id="dom.osgi"/>
-      <plugin id="dragdroplayouts.osgi"/>
-      <plugin id="easyuploads.osgi"/>
-      <plugin id="filteringtable.osgi"/>
-      <plugin id="groovy-all"/>
-      <plugin id="iban4j"/>
-      <plugin id="jackrabbit-jcr-commons-osgi"/>
-      <plugin id="jackrabbit-webdav-osgi"/>
-      <plugin id="jackson-core-asl"/>
-      <plugin id="java-cup.osgi"/>
-      <plugin id="javax.annotation"/>
-      <plugin id="javax.el"/>
-      <plugin id="javax.inject"/>
-      <plugin id="javax.jcr"/>
-      <plugin id="javax.persistence"/>
-      <plugin id="javax.servlet"/>
-      <plugin id="javax.transaction" fragment="true"/>
-      <plugin id="javax.validation.api"/>
-      <plugin id="javax.ws.rs.jsr311-api"/>
-      <plugin id="javax.wsdl"/>
-      <plugin id="javax.xml"/>
-      <plugin id="javax.xml.stream"/>
-      <plugin id="jaxen"/>
-      <plugin id="joda-time"/>
-      <plugin id="mondrian.osgi"/>
-      <plugin id="multifileupload.osgi"/>
-      <plugin id="net.osbee.vaaclipse.designer"/>
-      <plugin id="net.osbee.vaadin.designer"/>
-      <plugin id="olap4j-xmla.osgi"/>
-      <plugin id="olap4j.osgi"/>
-      <plugin id="org.antlr.runtime"/>
-      <plugin id="org.apache.ant"/>
-      <plugin id="org.apache.batik.bridge"/>
-      <plugin id="org.apache.batik.css"/>
-      <plugin id="org.apache.batik.dom"/>
-      <plugin id="org.apache.batik.dom.svg"/>
-      <plugin id="org.apache.batik.ext.awt"/>
-      <plugin id="org.apache.batik.parser"/>
-      <plugin id="org.apache.batik.svggen"/>
-      <plugin id="org.apache.batik.transcoder"/>
-      <plugin id="org.apache.batik.util"/>
-      <plugin id="org.apache.batik.util.gui"/>
-      <plugin id="org.apache.batik.xml"/>
-      <plugin id="org.apache.bval.org.apache.bval.bundle"/>
-      <plugin id="org.apache.commons.beanutils"/>
-      <plugin id="org.apache.commons.cli"/>
-      <plugin id="org.apache.commons.codec"/>
-      <plugin id="org.apache.commons.collections"/>
-      <plugin id="org.apache.commons.compress"/>
-      <plugin id="org.apache.commons.dbcp"/>
-      <plugin id="org.apache.commons.digester"/>
-      <plugin id="org.apache.commons.discovery"/>
-      <plugin id="org.apache.commons.email"/>
-      <plugin id="org.apache.commons.exec"/>
-      <plugin id="org.apache.commons.httpclient"/>
-      <plugin id="org.apache.commons.io"/>
-      <plugin id="org.apache.commons.jexl"/>
-      <plugin id="org.apache.commons.lang"/>
-      <plugin id="org.apache.commons.lang3"/>
-      <plugin id="org.apache.commons.logging"/>
-      <plugin id="org.apache.commons.math"/>
-      <plugin id="org.apache.commons.math3"/>
-      <plugin id="org.apache.commons.net"/>
-      <plugin id="org.apache.commons.pool"/>
-      <plugin id="org.apache.commons.vfs"/>
-      <plugin id="org.apache.commons.validator"/>
-      <plugin id="org.apache.cxf.cxf-core"/>
-      <plugin id="org.apache.cxf.cxf-rt-bindings-soap"/>
-      <plugin id="org.apache.cxf.cxf-rt-bindings-xml"/>
-      <plugin id="org.apache.cxf.cxf-rt-databinding-jaxb"/>
-      <plugin id="org.apache.cxf.cxf-rt-frontend-jaxws"/>
-      <plugin id="org.apache.cxf.cxf-rt-frontend-simple"/>
-      <plugin id="org.apache.cxf.cxf-rt-transports-http"/>
-      <plugin id="org.apache.cxf.cxf-rt-wsdl"/>
-      <plugin id="org.apache.felix.gogo.command"/>
-      <plugin id="org.apache.felix.gogo.runtime"/>
-      <plugin id="org.apache.felix.gogo.shell"/>
-      <plugin id="org.apache.httpcomponents.httpclient"/>
-      <plugin id="org.apache.httpcomponents.httpcore"/>
-      <plugin id="org.apache.log4j"/>
-      <plugin id="org.apache.pdfbox.fontbox"/>
-      <plugin id="org.apache.pdfbox"/>
-      <plugin id="org.apache.servicemix.bundles.jexcelapi"/>
-      <plugin id="org.apache.servicemix.bundles.wsdl4j"/>
-      <plugin id="org.apache.servicemix.bundles.xpp3"/>
-      <plugin id="org.apache.ws.xmlschema.core"/>
-      <plugin id="org.apache.xerces"/>
-      <plugin id="org.apache.xml.resolver"/>
-      <plugin id="org.apache.xml.serializer"/>
-      <plugin id="org.drools.api"/>
-      <plugin id="org.eclipse.birt.core"/>
-      <plugin id="org.eclipse.birt.data"/>
-      <plugin id="org.eclipse.birt.data.aggregation"/>
-      <plugin id="org.eclipse.birt.report.data.adapter"/>
-      <plugin id="org.eclipse.birt.report.engine"/>
-      <plugin id="org.eclipse.birt.report.engine.emitter.html"/>
-      <plugin id="org.eclipse.birt.report.engine.emitter.pdf"/>
-      <plugin id="org.eclipse.birt.report.engine.fonts"/>
-      <plugin id="org.eclipse.birt.report.engine.script.javascript"/>
-      <plugin id="org.eclipse.birt.report.model"/>
-      <plugin id="org.eclipse.bpmn2"/>
-      <plugin id="org.eclipse.bpmn2.edit"/>
-      <plugin id="org.eclipse.compare.core"/>
-      <plugin id="org.eclipse.core.commands"/>
-      <plugin id="org.eclipse.core.contenttype"/>
-      <plugin id="org.eclipse.core.databinding"/>
-      <plugin id="org.eclipse.core.databinding.beans"/>
-      <plugin id="org.eclipse.core.databinding.observable"/>
-      <plugin id="org.eclipse.core.databinding.property"/>
-      <plugin id="org.eclipse.core.expressions"/>
-      <plugin id="org.eclipse.core.filebuffers"/>
-      <plugin id="org.eclipse.core.filesystem"/>
-      <plugin id="org.eclipse.core.jobs"/>
-      <plugin id="org.eclipse.core.resources"/>
-      <plugin id="org.eclipse.core.runtime"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
-      <plugin id="org.eclipse.core.variables"/>
-      <plugin id="org.eclipse.datatools.connectivity"/>
-      <plugin id="org.eclipse.datatools.connectivity.oda"/>
-      <plugin id="org.eclipse.datatools.connectivity.oda.consumer"/>
-      <plugin id="org.eclipse.datatools.connectivity.oda.design"/>
-      <plugin id="org.eclipse.datatools.connectivity.oda.profile"/>
-      <plugin id="org.eclipse.debug.core"/>
-      <plugin id="org.eclipse.e4.core.commands"/>
-      <plugin id="org.eclipse.e4.core.contexts"/>
-      <plugin id="org.eclipse.e4.core.di"/>
-      <plugin id="org.eclipse.e4.core.di.extensions"/>
-      <plugin id="org.eclipse.e4.core.services" version="1.2.1.v20140808-1251"/>
-      <plugin id="org.eclipse.e4.ui.di"/>
-      <plugin id="org.eclipse.e4.ui.model.workbench"/>
-      <plugin id="org.eclipse.e4.ui.model.workbench.edit"/>
-      <plugin id="org.eclipse.e4.ui.services"/>
-      <plugin id="org.eclipse.e4.ui.workbench"/>
-      <plugin id="org.eclipse.emf.codegen"/>
-      <plugin id="org.eclipse.emf.codegen.ecore"/>
-      <plugin id="org.eclipse.emf.codegen.ecore.xtext"/>
-      <plugin id="org.eclipse.emf.common"/>
-      <plugin id="org.eclipse.emf.databinding"/>
-      <plugin id="org.eclipse.emf.databinding.edit"/>
-      <plugin id="org.eclipse.emf.ecore"/>
-      <plugin id="org.eclipse.emf.ecore.change"/>
-      <plugin id="org.eclipse.emf.ecore.change.edit"/>
-      <plugin id="org.eclipse.emf.ecore.edit"/>
-      <plugin id="org.eclipse.emf.ecore.xcore"/>
-      <plugin id="org.eclipse.emf.ecore.xcore.lib"/>
-      <plugin id="org.eclipse.emf.ecore.xmi"/>
-      <plugin id="org.eclipse.emf.edit"/>
-      <plugin id="org.eclipse.emf.mwe.core"/>
-      <plugin id="org.eclipse.emf.mwe.utils"/>
-      <plugin id="org.eclipse.emf.mwe2.runtime"/>
-      <plugin id="org.eclipse.equinox.app"/>
-      <plugin id="org.eclipse.equinox.bidi"/>
-      <plugin id="org.eclipse.equinox.common"/>
-      <plugin id="org.eclipse.equinox.console"/>
-      <plugin id="org.eclipse.equinox.coordinator"/>
-      <plugin id="org.eclipse.equinox.ds"/>
-      <plugin id="org.eclipse.equinox.event"/>
-      <plugin id="org.eclipse.equinox.http.registry"/>
-      <plugin id="org.eclipse.equinox.http.servlet"/>
-      <plugin id="org.eclipse.equinox.preferences"/>
-      <plugin id="org.eclipse.equinox.registry"/>
-      <plugin id="org.eclipse.equinox.security"/>
-      <plugin id="org.eclipse.equinox.util"/>
-      <plugin id="org.eclipse.gemini.dbaccess.util"/>
-      <plugin id="org.eclipse.help"/>
-      <plugin id="org.eclipse.jdt.compiler.apt" fragment="true"/>
-      <plugin id="org.eclipse.jdt.compiler.tool" fragment="true"/>
-      <plugin id="org.eclipse.jdt.core"/>
-      <plugin id="org.eclipse.jdt.debug"/>
-      <plugin id="org.eclipse.jdt.launching"/>
-      <plugin id="org.eclipse.jetty.continuation"/>
-      <plugin id="org.eclipse.jetty.http"/>
-      <plugin id="org.eclipse.jetty.io"/>
-      <plugin id="org.eclipse.jetty.security"/>
-      <plugin id="org.eclipse.jetty.server"/>
-      <plugin id="org.eclipse.jetty.servlet"/>
-      <plugin id="org.eclipse.jetty.util"/>
-      <plugin id="org.eclipse.jetty.websocket"/>
-      <plugin id="org.eclipse.osbp.authentication"/>
-      <plugin id="org.eclipse.osbp.authentication.ui"/>
-      <plugin id="org.eclipse.osbp.bpm.api"/>
-      <plugin id="org.eclipse.osbp.bpmn2.ecore"/>
-      <plugin id="org.eclipse.osbp.commons"/>
-      <plugin id="org.eclipse.osbp.dsl.common.xtext"/>
-      <plugin id="org.eclipse.osbp.dsl.datatype.lib"/>
-      <plugin id="org.eclipse.osbp.dsl.datatype.xtext"/>
-      <plugin id="org.eclipse.osbp.dsl.dto.lib"/>
-      <plugin id="org.eclipse.osbp.dsl.dto.xtext"/>
-      <plugin id="org.eclipse.osbp.dsl.entity.xtext"/>
-      <plugin id="org.eclipse.osbp.dsl.metadata.service"/>
-      <plugin id="org.eclipse.osbp.dsl.mwe"/>
-      <plugin id="org.eclipse.osbp.dsl.xtext.builder.participant"/>
-      <plugin id="org.eclipse.osbp.dsl.xtext.lazyresolver"/>
-      <plugin id="org.eclipse.osbp.dsl.xtext.lazyresolver.api"/>
-      <plugin id="org.eclipse.osbp.e4extension"/>
-      <plugin id="org.eclipse.osbp.e4modelextension"/>
-      <plugin id="org.eclipse.osbp.ecview.core.common"/>
-      <plugin id="org.eclipse.osbp.ecview.core.common.editparts.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.core.common.model"/>
-      <plugin id="org.eclipse.osbp.ecview.core.common.model.edit"/>
-      <plugin id="org.eclipse.osbp.ecview.core.databinding.beans"/>
-      <plugin id="org.eclipse.osbp.ecview.core.databinding.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.core.emf.api"/>
-      <plugin id="org.eclipse.osbp.ecview.core.extension.editparts"/>
-      <plugin id="org.eclipse.osbp.ecview.core.extension.editparts.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.core.extension.model"/>
-      <plugin id="org.eclipse.osbp.ecview.core.extension.model.edit"/>
-      <plugin id="org.eclipse.osbp.ecview.core.ui.presentation.common"/>
-      <plugin id="org.eclipse.osbp.ecview.core.util.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.dsl"/>
-      <plugin id="org.eclipse.osbp.ecview.dsl.lib"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.api"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.editparts"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.editparts.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.editparts"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.editparts.emf"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.model"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.model.edit"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.presentation"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.grid.presentation.clientside"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.model"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.model.edit"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.presentation.vaadin"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.services"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.strategy"/>
-      <plugin id="org.eclipse.osbp.ecview.extension.widgetset"/>
-      <plugin id="org.eclipse.osbp.ecview.jetty.manager"/>
-      <plugin id="org.eclipse.osbp.ecview.uisemantics"/>
-      <plugin id="org.eclipse.osbp.ecview.xtext.builder.participant"/>
-      <plugin id="org.eclipse.osbp.ecview.xtext.builder.participant.i18n"/>
-      <plugin id="org.eclipse.osbp.eventbroker"/>
-      <plugin id="org.eclipse.osbp.filter"/>
-      <plugin id="org.eclipse.osbp.fork.gemini.naming"/>
-      <plugin id="org.eclipse.osbp.fork.vaadin.addon.maskedtextfield"/>
-      <plugin id="org.eclipse.osbp.gitinfo"/>
-      <plugin id="org.eclipse.osbp.i18n.common"/>
-      <plugin id="org.eclipse.osbp.infogrid.api"/>
-      <plugin id="org.eclipse.osbp.infogrid.ecview"/>
-      <plugin id="org.eclipse.osbp.infogrid.model"/>
-      <plugin id="org.eclipse.osbp.infogrid.services"/>
-      <plugin id="org.eclipse.osbp.infogrid.vaaclipse"/>
-      <plugin id="org.eclipse.osbp.infogrid.vaadin"/>
-      <plugin id="org.eclipse.osbp.mobile.vaadin.ecview.api"/>
-      <plugin id="org.eclipse.osbp.mobile.vaadin.ecview.editparts"/>
-      <plugin id="org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf"/>
-      <plugin id="org.eclipse.osbp.mobile.vaadin.ecview.model"/>
-      <plugin id="org.eclipse.osbp.mondrian"/>
-      <plugin id="org.eclipse.osbp.mondrian.api"/>
-      <plugin id="org.eclipse.osbp.osgi.hybrid.api"/>
-      <plugin id="org.eclipse.osbp.osgi.hybrid.api.runtime"/>
-      <plugin id="org.eclipse.osbp.persistence"/>
-      <plugin id="org.eclipse.osbp.preferences"/>
-      <plugin id="org.eclipse.osbp.runtime.common"/>
-      <plugin id="org.eclipse.osbp.runtime.designer.api"/>
-      <plugin id="org.eclipse.osbp.runtime.ecore.bundlespace"/>
-      <plugin id="org.eclipse.osbp.runtime.event"/>
-      <plugin id="org.eclipse.osbp.runtime.jsr303.validation"/>
-      <plugin id="org.eclipse.osbp.runtime.systemextension" fragment="true"/>
-      <plugin id="org.eclipse.osbp.runtime.typeprovider.bundlespace"/>
-      <plugin id="org.eclipse.osbp.runtime.web.atmosphere.fragment" fragment="true"/>
-      <plugin id="org.eclipse.osbp.runtime.web.common"/>
-      <plugin id="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin"/>
-      <plugin id="org.eclipse.osbp.runtime.web.vaadin.common"/>
-      <plugin id="org.eclipse.osbp.runtime.web.vaadin.components"/>
-      <plugin id="org.eclipse.osbp.runtime.web.vaadin.components.widget"/>
-      <plugin id="org.eclipse.osbp.runtime.web.vaadin.databinding"/>
-      <plugin id="org.eclipse.osbp.runtime.web.vaadin.widgetset"/>
-      <plugin id="org.eclipse.osbp.themes"/>
-      <plugin id="org.eclipse.osbp.ui.api"/>
-      <plugin id="org.eclipse.osbp.ui.common"/>
-      <plugin id="org.eclipse.osbp.user"/>
-      <plugin id="org.eclipse.osbp.utils"/>
-      <plugin id="org.eclipse.osbp.utils.blob"/>
-      <plugin id="org.eclipse.osbp.utils.bpmn"/>
-      <plugin id="org.eclipse.osbp.utils.entitymock.dbfill.ui"/>
-      <plugin id="org.eclipse.osbp.utils.functionnormalizer"/>
-      <plugin id="org.eclipse.osbp.utils.img"/>
-      <plugin id="org.eclipse.osbp.utils.js"/>
-      <plugin id="org.eclipse.osbp.utils.themes.ui"/>
-      <plugin id="org.eclipse.osbp.utils.ui"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.additions"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.app"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.application"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.common"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.common.api"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.ecview"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.ecview.lib"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.keybinding"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.perspective"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.problems"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.addons.softwarefactory"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.api"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.behaviour"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.behaviour.source"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.common.ecview"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.common.ecview.api"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.contributions"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.emf"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.emf.addon"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.emf.api"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.presentation"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.publicapi"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.resources" fragment="true"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.theme"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.ui.preferences.addon"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.ui.preferences.model"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.util"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.widgets"/>
-      <plugin id="org.eclipse.osbp.vaaclipse.widgetset.default"/>
-      <plugin id="org.eclipse.osbp.vaadin"/>
-      <plugin id="org.eclipse.osbp.vaadin.addons.absolutelayout"/>
-      <plugin id="org.eclipse.osbp.vaadin.addons.designer.overlay"/>
-      <plugin id="org.eclipse.osbp.vaadin.addons.suggesttext"/>
-      <plugin id="org.eclipse.osbp.vaadin.emf"/>
-      <plugin id="org.eclipse.osbp.vaadin.emf.api"/>
-      <plugin id="org.eclipse.osbp.vaadin.widgetset"/>
-      <plugin id="org.eclipse.osbp.webserver.messagequeue"/>
-      <plugin id="org.eclipse.osbp.xtext.action"/>
-      <plugin id="org.eclipse.osbp.xtext.addons"/>
-      <plugin id="org.eclipse.osbp.xtext.authorizationdsl"/>
-      <plugin id="org.eclipse.osbp.xtext.basic"/>
-      <plugin id="org.eclipse.osbp.xtext.blip"/>
-      <plugin id="org.eclipse.osbp.xtext.builder.metadata.services"/>
-      <plugin id="org.eclipse.osbp.xtext.builder.types.bundles"/>
-      <plugin id="org.eclipse.osbp.xtext.builder.types.loader.api"/>
-      <plugin id="org.eclipse.osbp.xtext.builder.types.loader.runtime"/>
-      <plugin id="org.eclipse.osbp.xtext.builder.xbase.setups"/>
-      <plugin id="org.eclipse.osbp.xtext.chart"/>
-      <plugin id="org.eclipse.osbp.xtext.cubedsl"/>
-      <plugin id="org.eclipse.osbp.xtext.datainterchange"/>
-      <plugin id="org.eclipse.osbp.xtext.datainterchange.common"/>
-      <plugin id="org.eclipse.osbp.xtext.datamart.common"/>
-      <plugin id="org.eclipse.osbp.xtext.datamartdsl"/>
-      <plugin id="org.eclipse.osbp.xtext.dialogdsl"/>
-      <plugin id="org.eclipse.osbp.xtext.entitymock"/>
-      <plugin id="org.eclipse.osbp.xtext.functionlibrary.common"/>
-      <plugin id="org.eclipse.osbp.xtext.functionlibrary.common.api"/>
-      <plugin id="org.eclipse.osbp.xtext.functionlibrarydsl"/>
-      <plugin id="org.eclipse.osbp.xtext.functionlibrarydsl.provider"/>
-      <plugin id="org.eclipse.osbp.xtext.gridsource"/>
-      <plugin id="org.eclipse.osbp.xtext.i18n"/>
-      <plugin id="org.eclipse.osbp.xtext.menu"/>
-      <plugin id="org.eclipse.osbp.xtext.messagedsl"/>
-      <plugin id="org.eclipse.osbp.xtext.organizationdsl"/>
-      <plugin id="org.eclipse.osbp.xtext.perspective"/>
-      <plugin id="org.eclipse.osbp.xtext.reportdsl"/>
-      <plugin id="org.eclipse.osbp.xtext.reportdsl.oda.datamart"/>
-      <plugin id="org.eclipse.osbp.xtext.strategy"/>
-      <plugin id="org.eclipse.osbp.xtext.table"/>
-      <plugin id="org.eclipse.osbp.xtext.table.common"/>
-      <plugin id="org.eclipse.osbp.xtext.topologydsl"/>
-      <plugin id="org.eclipse.osgi"/>
-      <plugin id="org.eclipse.osgi.compatibility.state" fragment="true"/>
-      <plugin id="org.eclipse.osgi.services"/>
-      <plugin id="org.eclipse.osgi.util"/>
-      <plugin id="org.eclipse.persistence.antlr"/>
-      <plugin id="org.eclipse.persistence.asm"/>
-      <plugin id="org.eclipse.persistence.core"/>
-      <plugin id="org.eclipse.persistence.jpa"/>
-      <plugin id="org.eclipse.persistence.jpa.jpql"/>
-      <plugin id="org.eclipse.text"/>
-      <plugin id="org.eclipse.uomo.core"/>
-      <plugin id="org.eclipse.uomo.ucum"/>
-      <plugin id="org.eclipse.uomo.ui"/>
-      <plugin id="org.eclipse.uomo.units"/>
-      <plugin id="org.eclipse.uomo.util"/>
-      <plugin id="org.eclipse.uomo.xml"/>
-      <plugin id="org.eclipse.xpand"/>
-      <plugin id="org.eclipse.xsd"/>
-      <plugin id="org.eclipse.xsd.edit"/>
-      <plugin id="org.eclipse.xtend"/>
-      <plugin id="org.eclipse.xtend.lib"/>
-      <plugin id="org.eclipse.xtend.lib.macro"/>
-      <plugin id="org.eclipse.xtend.typesystem.emf"/>
-      <plugin id="org.eclipse.xtext"/>
-      <plugin id="org.eclipse.xtext.common.types"/>
-      <plugin id="org.eclipse.xtext.common.types.edit"/>
-      <plugin id="org.eclipse.xtext.ecore"/>
-      <plugin id="org.eclipse.xtext.generator"/>
-      <plugin id="org.eclipse.xtext.util"/>
-      <plugin id="org.eclipse.xtext.xbase"/>
-      <plugin id="org.eclipse.xtext.xbase.lib"/>
-      <plugin id="org.freemarker.freemarker"/>
-      <plugin id="org.glassfish.javax.json"/>
-      <plugin id="org.hamcrest.core"/>
-      <plugin id="org.jivesoftware.smack"/>
-      <plugin id="org.joda.convert"/>
-      <plugin id="org.joda.money"/>
-      <plugin id="org.json"/>
-      <plugin id="org.jsoup"/>
-      <plugin id="org.junit"/>
-      <plugin id="org.milyn.smooks.osgi"/>
-      <plugin id="org.mozilla.javascript"/>
-      <plugin id="org.mvel2"/>
-      <plugin id="org.objectweb.asm"/>
-      <plugin id="org.restlet"/>
-      <plugin id="org.slf4j.api"/>
-      <plugin id="org.unitsofmeasurement.unit-api"/>
-      <plugin id="org.vaadin.addons.vaadin-grid-util"/>
-      <plugin id="org.w3c.css.sac"/>
-      <plugin id="org.w3c.dom.events"/>
-      <plugin id="org.w3c.dom.smil"/>
-      <plugin id="org.w3c.dom.svg"/>
-      <plugin id="org.w3c.flute"/>
-      <plugin id="org.w3c.sac"/>
-      <plugin id="org.xmlpull"/>
-      <plugin id="org.yaml.snakeyaml"/>
-      <plugin id="osgi.enterprise"/>
-      <plugin id="osgi.sun"/>
-      <plugin id="overlays.osgi"/>
-      <plugin id="popupbutton.osgi"/>
-      <plugin id="refresher.osgi"/>
-      <plugin id="sizereporter.osgi"/>
-      <plugin id="xstream"/>
-${{NECESSARY_DATA_BASE_VENDOR_PLUGINS}}
-		''')
-	}
-	
-	override getRecommendedAsString() {
-		prepareSerialized(
-		'''
-      <plugin id="net.osbee.bpm"/>
-      <plugin id="net.osbee.mobile.vaadin.ecview.presentation"/>
-      <plugin id="net.osbee.mobile.vaadin.ecview.servlet.mobile"/>
-      <plugin id="net.osbee.mobile.vaadin.touchkit.osgi"/>
-      <plugin id="net.osbee.mobile.vaadin.utils"/>
-      <plugin id="net.osbee.mobile.vaadin.widgetset"/>
-      <plugin id="net.osbee.organization.permissions"/>
-      <plugin id="net.osbee.utils.js"/>
-      <plugin id="net.osbee.vaaclipse.designer"/>
-      <plugin id="net.osbee.vaadin.designer"/>
-      <plugin id="net.osbee.xtext.cubedsl"/>
-      <plugin id="net.osbee.xtext.cubedsl.services"/>
-      <plugin id="net.osbee.xtext.organizationdsl"/>
-      <plugin id="net.osbee.xtext.organizationdsl.api"/>
-      <plugin id="net.osbee.xtext.organizationdsl.services"/>
-      <plugin id="net.osbee.xtext.organizationdsl.vaaclipse"/>
-		''')
-	}
-	
-	override prepareSerialized(String asString) {
-		removeDuplicates(asString
-			.replace(
-				"${{NECESSARY_DATA_BASE_VENDOR_PLUGINS}}",
-				EnumDatabaseVendor.getNecessaryPlugins(necessaryDataBaseVendors)
-			)
-			.replace(
-				"${{UNNECESSARY_DATA_BASE_VENDOR_PLUGINS}}",
-				EnumDatabaseVendor.getUnnecessaryPlugins(necessaryDataBaseVendors)
-			)
-		)
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/welcome.html b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/welcome.html
new file mode 100644
index 0000000..87a823b
--- /dev/null
+++ b/org.eclipse.osbp.preferences/src/org/eclipse/osbp/preferences/welcome.html
@@ -0,0 +1,6 @@
+<iframe src="./VAADIN/themes/osbp/html/Welcome.html" 
+width="100%" height="100%" name="welcome page">
+
+  <p>Alternative Welcome page</p>
+
+</iframe>
diff --git a/org.eclipse.osbp.preferences/xtend-gen/.gitignore b/org.eclipse.osbp.preferences/xtend-gen/.gitignore
new file mode 100644
index 0000000..1b5b6a9
--- /dev/null
+++ b/org.eclipse.osbp.preferences/xtend-gen/.gitignore
@@ -0,0 +1,2 @@
+/.ProductFileConfigurations.xtendbin
+/.ProductFilePlugins.xtendbin
diff --git a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/.gitignore b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/.gitignore
new file mode 100644
index 0000000..1442f65
--- /dev/null
+++ b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/.gitignore
@@ -0,0 +1,2 @@
+/ProductFileConfigurations.java
+/ProductFilePlugins.java
diff --git a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileConfigurations.java b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileConfigurations.java
index 9b6514c..55b8f92 100644
--- a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileConfigurations.java
+++ b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileConfigurations.java
@@ -29,6 +29,7 @@
     super(prefs, jndiNames);
   }
   
+  @Override
   public String getDeprecatedAsString() {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("${{UNNECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}");
@@ -48,70 +49,51 @@
     return this.prepareSerialized(_builder.toString());
   }
   
+  @Override
   public String getRequiredAsString() {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.core.runtime\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.e4.ui.services\" autoStart=\"false\" startLevel=\"1\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.equinox.common\" autoStart=\"true\" startLevel=\"2\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.equinox.coordinator\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.equinox.ds\" autoStart=\"true\" startLevel=\"1\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.equinox.event\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
+    _builder.append("<plugin id=\"org.eclipse.gemini.naming\" autoStart=\"true\" startLevel=\"3\" />");
+    _builder.newLine();
     _builder.append("<plugin id=\"org.eclipse.osbp.dsl.dto.lib\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.dsl.metadata.service\" autoStart=\"true\" startLevel=\"3\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.strategy\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.ecview.jetty.manager\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.fork.gemini.naming\" autoStart=\"true\" startLevel=\"3\" />");
-    _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.osgi.hybrid.api\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.persistence\" autoStart=\"true\" startLevel=\"0\" />");
-    _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.runtime.ecore.bundlespace\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.runtime.event\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.runtime.jsr303.validation\" autoStart=\"true\" startLevel=\"4\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.runtime.typeprovider.bundlespace\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osbp.utils.entitymock.dbfill.ui\" autoStart=\"true\" startLevel=\"0\" />");
     _builder.newLine();
-    _builder.append("      ");
     _builder.append("<plugin id=\"org.eclipse.osgi\" autoStart=\"true\" startLevel=\"-1\" />");
     _builder.newLine();
     return this.prepareSerialized(_builder.toString());
   }
   
+  @Override
   public String getRecommendedAsString() {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("<plugin id=\"net.osbee.mobile.vaadin.ecview.servlet.mobile\" autoStart=\"true\" startLevel=\"0\" />");
@@ -119,13 +101,11 @@
     return this.prepareSerialized(_builder.toString());
   }
   
+  @Override
   public String prepareSerialized(final String asString) {
-    String _necessaryConfigurations = EnumDatabaseVendor.getNecessaryConfigurations(this.necessaryDataBaseVendors);
-    String _replace = asString.replace(
-      "${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}", _necessaryConfigurations);
-    String _unnecessaryConfigurations = EnumDatabaseVendor.getUnnecessaryConfigurations(this.necessaryDataBaseVendors);
-    String _replace_1 = _replace.replace(
-      "${{UNNECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}", _unnecessaryConfigurations);
-    return this.removeDuplicates(_replace_1);
+    return this.removeDuplicates(
+      asString.replace(
+        "${{NECESSARY_DATA_BASE_VENDOR_CONFIGURATIONS}}", 
+        EnumDatabaseVendor.getNecessaryConfigurations(this.dataBaseVendors)));
   }
 }
diff --git a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileFeatures.java b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileFeatures.java
new file mode 100644
index 0000000..f7d20a9
--- /dev/null
+++ b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFileFeatures.java
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 
+ * 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:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ */
+package org.eclipse.osbp.preferences;
+
+import org.eclipse.core.runtime.IBundleGroup;
+import org.eclipse.core.runtime.IBundleGroupProvider;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osbp.preferences.EnumDatabaseVendor;
+import org.eclipse.osbp.preferences.ProductConfigurationPrefs;
+import org.eclipse.osbp.preferences.ProductFileBase;
+import org.eclipse.xtend2.lib.StringConcatenation;
+
+/**
+ * &lt;plugins&gt; dependencies for the OSBP product bundle <code>*.product</code> file.
+ */
+@SuppressWarnings("all")
+public class ProductFileFeatures extends ProductFileBase {
+  public ProductFileFeatures(final ProductConfigurationPrefs prefs) {
+    super(prefs);
+  }
+  
+  public ProductFileFeatures(final ProductConfigurationPrefs prefs, final String... jndiNames) {
+    super(prefs, jndiNames);
+  }
+  
+  @Override
+  public String getDeprecatedAsString() {
+    return null;
+  }
+  
+  /**
+   * Creates the list of used plugins for the .product file in the product targetbundle.
+   */
+  @Override
+  public String getRequiredAsString() {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("${{DATA_BASE_VENDOR_FEATURES}}");
+    _builder.newLine();
+    String _runtimeSoftwareFeature = this.getRuntimeSoftwareFeature();
+    _builder.append(_runtimeSoftwareFeature);
+    _builder.newLineIfNotEmpty();
+    return this.prepareSerialized(_builder.toString());
+  }
+  
+  @Override
+  public String getRecommendedAsString() {
+    return null;
+  }
+  
+  @Override
+  public String prepareSerialized(final String asString) {
+    return this.removeDuplicates(
+      asString.replace(
+        "${{DATA_BASE_VENDOR_FEATURES}}", 
+        EnumDatabaseVendor.getDatabaseFeatures(this.dataBaseVendors)));
+  }
+  
+  private String getRuntimeSoftwareFeature() {
+    boolean netOsbee = false;
+    boolean orgOsbee = false;
+    IBundleGroupProvider[] _bundleGroupProviders = Platform.getBundleGroupProviders();
+    for (final IBundleGroupProvider provider : _bundleGroupProviders) {
+      IBundleGroup[] _bundleGroups = provider.getBundleGroups();
+      for (final IBundleGroup feature : _bundleGroups) {
+        {
+          String featureId = feature.getIdentifier();
+          if ((featureId != null)) {
+            boolean _startsWith = featureId.startsWith("net.osbee");
+            if (_startsWith) {
+              netOsbee = true;
+            } else {
+              boolean _startsWith_1 = featureId.startsWith("org.osbee");
+              if (_startsWith_1) {
+                orgOsbee = true;
+              }
+            }
+          }
+        }
+      }
+    }
+    if (netOsbee) {
+      return "\t<feature id=\"net.osbee.softwarefactory.runtime.feature\"/>";
+    } else {
+      if (orgOsbee) {
+        return "\t<feature id=\"org.osbee.softwarefactory.runtime.feature\"/>";
+      }
+    }
+    return "\t<feature id=\"org.eclipse.osbp.softwarefactory.runtime.feature\"/>";
+  }
+}
diff --git a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFilePlugins.java b/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFilePlugins.java
deleted file mode 100644
index d60d6dd..0000000
--- a/org.eclipse.osbp.preferences/xtend-gen/org/eclipse/osbp/preferences/ProductFilePlugins.java
+++ /dev/null
@@ -1,1478 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * 
- * 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:
- * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- */
-package org.eclipse.osbp.preferences;
-
-import org.eclipse.osbp.preferences.EnumDatabaseVendor;
-import org.eclipse.osbp.preferences.ProductConfigurationPrefs;
-import org.eclipse.osbp.preferences.ProductFileBase;
-import org.eclipse.xtend2.lib.StringConcatenation;
-
-/**
- * &lt;plugins&gt; dependencies for the OSBP product bundle <code>*.product</code> file.
- */
-@SuppressWarnings("all")
-public class ProductFilePlugins extends ProductFileBase {
-  public ProductFilePlugins(final ProductConfigurationPrefs prefs) {
-    super(prefs);
-  }
-  
-  public ProductFilePlugins(final ProductConfigurationPrefs prefs, final String... jndiNames) {
-    super(prefs, jndiNames);
-  }
-  
-  public String getDeprecatedAsString() {
-    StringConcatenation _builder = new StringConcatenation();
-    _builder.append("${{UNNECESSARY_DATA_BASE_VENDOR_PLUGINS}}");
-    _builder.newLine();
-    _builder.append("        ");
-    _builder.append("<plugin id=\"com.google.protobuf\"/>");
-    _builder.newLine();
-    _builder.append("        ");
-    _builder.append("<plugin id=\"com.springsource.javax.jms\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.common\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.common.edit\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.dto\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.entity\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.entity.edit\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.semantic.service\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.vaadin.servlet.mobile\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mobile.vaadin.touchkit.osgi\"/>");
-    _builder.newLine();
-    _builder.append("\t\t");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.mobile.ui\"/>");
-    _builder.newLine();
-    _builder.append("        ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.vaadin.addon.contextmenu\"/>");
-    _builder.newLine();
-    _builder.append("        ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.vaadin.addon.dndlayout\"/>");
-    _builder.newLine();
-    return this.prepareSerialized(_builder.toString());
-  }
-  
-  public String getRequiredAsString() {
-    StringConcatenation _builder = new StringConcatenation();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"OpenCSV\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"activemq-all-osgi-5.9.0\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"animator.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"ca.ecliptical.pde.ds.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"ch.qos.logback.classic\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"ch.qos.logback.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"ch.qos.logback.slf4j\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.api.translate.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.guava\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.gwt.thirdparty.guava\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.gwt.thirdparty.streamhtmlparser\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.inject\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.google.inject.assistedinject\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.ibm.icu\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.jcraft.jsch\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.lowagie.text\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.jms\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.springsource.org.antlr.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.springsource.org.codehaus.commons.compiler\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.springsource.org.codehaus.janino\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.sun.mail.javax.mail\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.client\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.client-compiled\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.external.atmosphere.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.external.org.slf4j\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.push\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.sass-compiler\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.server\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.shared\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.theme-compiler\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"com.vaadin.themes\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"commons-vfs-osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"contextmenu.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"dCharts.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"dragdroplayouts.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"dom.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"dragdroplayouts.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"easyuploads.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"filteringtable.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"groovy-all\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"iban4j\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"jackrabbit-jcr-commons-osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"jackrabbit-webdav-osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"jackson-core-asl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"java-cup.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.annotation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.el\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.inject\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.jcr\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.persistence\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.servlet\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.transaction\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.validation.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.ws.rs.jsr311-api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.wsdl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.xml\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"javax.xml.stream\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"jaxen\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"joda-time\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"mondrian.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"multifileupload.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"net.osbee.vaaclipse.designer\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"net.osbee.vaadin.designer\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"olap4j-xmla.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"olap4j.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.antlr.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.ant\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.bridge\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.css\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.dom\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.dom.svg\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.ext.awt\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.parser\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.svggen\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.transcoder\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.util.gui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.batik.xml\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.bval.org.apache.bval.bundle\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.beanutils\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.cli\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.codec\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.collections\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.compress\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.dbcp\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.digester\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.discovery\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.email\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.exec\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.httpclient\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.io\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.jexl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.lang\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.lang3\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.logging\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.math\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.math3\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.net\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.pool\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.vfs\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.commons.validator\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-bindings-soap\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-bindings-xml\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-databinding-jaxb\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-frontend-jaxws\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-frontend-simple\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-transports-http\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.cxf.cxf-rt-wsdl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.felix.gogo.command\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.felix.gogo.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.felix.gogo.shell\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.httpcomponents.httpclient\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.httpcomponents.httpcore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.log4j\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.pdfbox.fontbox\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.pdfbox\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.servicemix.bundles.jexcelapi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.servicemix.bundles.wsdl4j\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.servicemix.bundles.xpp3\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.ws.xmlschema.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.xerces\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.xml.resolver\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.apache.xml.serializer\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.drools.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.data\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.data.aggregation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.data.adapter\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.engine\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.engine.emitter.html\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.engine.emitter.pdf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.engine.fonts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.engine.script.javascript\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.birt.report.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.bpmn2\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.bpmn2.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.compare.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.commands\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.contenttype\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.databinding\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.databinding.beans\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.databinding.observable\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.databinding.property\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.expressions\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.filebuffers\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.filesystem\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.jobs\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.resources\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.runtime.compatibility.registry\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.core.variables\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.datatools.connectivity\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.datatools.connectivity.oda\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.datatools.connectivity.oda.consumer\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.datatools.connectivity.oda.design\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.datatools.connectivity.oda.profile\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.debug.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.core.commands\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.core.contexts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.core.di\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.core.di.extensions\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.core.services\" version=\"1.2.1.v20140808-1251\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.ui.di\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.ui.model.workbench\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.ui.model.workbench.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.ui.services\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.e4.ui.workbench\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.codegen\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.codegen.ecore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.codegen.ecore.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.databinding\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.databinding.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.change\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.change.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.xcore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.xcore.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.ecore.xmi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.mwe.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.mwe.utils\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.emf.mwe2.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.app\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.bidi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.console\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.coordinator\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.ds\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.event\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.http.registry\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.http.servlet\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.preferences\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.registry\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.security\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.equinox.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.gemini.dbaccess.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.help\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jdt.compiler.apt\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jdt.compiler.tool\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jdt.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jdt.debug\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jdt.launching\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.continuation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.http\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.io\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.security\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.server\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.servlet\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.jetty.websocket\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.authentication\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.authentication.ui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.bpm.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.bpmn2.ecore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.commons\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.common.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.datatype.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.datatype.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.dto.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.dto.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.entity.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.metadata.service\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.mwe\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.xtext.builder.participant\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.xtext.lazyresolver\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.dsl.xtext.lazyresolver.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.e4extension\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.e4modelextension\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.common.editparts.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.common.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.common.model.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.databinding.beans\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.databinding.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.emf.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.extension.editparts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.extension.editparts.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.extension.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.extension.model.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.ui.presentation.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.core.util.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.dsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.dsl.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.editparts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.editparts.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.editparts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.editparts.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.model.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.presentation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.grid.presentation.clientside\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.model.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.presentation.vaadin\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.services\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.strategy\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.extension.widgetset\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.jetty.manager\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.uisemantics\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.xtext.builder.participant\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ecview.xtext.builder.participant.i18n\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.eventbroker\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.filter\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.fork.gemini.naming\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.fork.vaadin.addon.maskedtextfield\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.gitinfo\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.i18n.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.ecview\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.services\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.vaaclipse\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.infogrid.vaadin\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mobile.vaadin.ecview.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mobile.vaadin.ecview.editparts\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mobile.vaadin.ecview.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mondrian\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.mondrian.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.osgi.hybrid.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.osgi.hybrid.api.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.persistence\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.preferences\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.designer.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.ecore.bundlespace\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.event\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.jsr303.validation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.systemextension\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.typeprovider.bundlespace\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.atmosphere.fragment\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.ecview.presentation.vaadin\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.vaadin.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.vaadin.components\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.vaadin.components.widget\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.vaadin.databinding\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.runtime.web.vaadin.widgetset\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.themes\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ui.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.ui.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.user\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.blob\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.bpmn\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.entitymock.dbfill.ui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.functionnormalizer\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.img\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.js\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.themes.ui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.utils.ui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.additions\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.app\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.application\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.common.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.ecview\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.ecview.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.keybinding\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.perspective\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.problems\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.addons.softwarefactory\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.behaviour\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.behaviour.source\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.common.ecview\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.common.ecview.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.contributions\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.emf.addon\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.emf.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.presentation\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.publicapi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.resources\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.theme\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.ui.preferences.addon\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.ui.preferences.model\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.widgets\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaaclipse.widgetset.default\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.addons.absolutelayout\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.addons.designer.overlay\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.addons.suggesttext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.emf.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.vaadin.widgetset\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.webserver.messagequeue\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.action\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.addons\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.authorizationdsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.basic\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.blip\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.builder.metadata.services\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.builder.types.bundles\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.builder.types.loader.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.builder.types.loader.runtime\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.builder.xbase.setups\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.chart\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.cubedsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.datainterchange\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.datainterchange.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.datamart.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.datamartdsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.dialogdsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.entitymock\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.functionlibrary.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.functionlibrary.common.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.functionlibrarydsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.functionlibrarydsl.provider\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.gridsource\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.i18n\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.menu\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.messagedsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.organizationdsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.perspective\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.reportdsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.reportdsl.oda.datamart\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.strategy\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.table\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.table.common\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osbp.xtext.topologydsl\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osgi.compatibility.state\" fragment=\"true\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osgi.services\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.osgi.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.persistence.antlr\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.persistence.asm\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.persistence.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.persistence.jpa\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.persistence.jpa.jpql\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.text\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.ucum\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.ui\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.units\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.uomo.xml\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xpand\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xsd\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xsd.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtend\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtend.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtend.lib.macro\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtend.typesystem.emf\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.common.types\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.common.types.edit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.ecore\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.generator\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.xbase\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.eclipse.xtext.xbase.lib\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.freemarker.freemarker\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.glassfish.javax.json\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.hamcrest.core\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.jivesoftware.smack\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.joda.convert\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.joda.money\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.json\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.jsoup\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.junit\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.milyn.smooks.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.mozilla.javascript\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.mvel2\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.objectweb.asm\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.restlet\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.slf4j.api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.unitsofmeasurement.unit-api\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.vaadin.addons.vaadin-grid-util\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.css.sac\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.dom.events\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.dom.smil\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.dom.svg\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.flute\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.w3c.sac\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.xmlpull\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"org.yaml.snakeyaml\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"osgi.enterprise\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"osgi.sun\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"overlays.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"popupbutton.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"refresher.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"sizereporter.osgi\"/>");
-    _builder.newLine();
-    _builder.append("      ");
-    _builder.append("<plugin id=\"xstream\"/>");
-    _builder.newLine();
-    _builder.append("${{NECESSARY_DATA_BASE_VENDOR_PLUGINS}}");
-    _builder.newLine();
-    return this.prepareSerialized(_builder.toString());
-  }
-  
-  public String getRecommendedAsString() {
-    StringConcatenation _builder = new StringConcatenation();
-    _builder.append("<plugin id=\"net.osbee.bpm\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.mobile.vaadin.ecview.presentation\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.mobile.vaadin.ecview.servlet.mobile\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.mobile.vaadin.touchkit.osgi\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.mobile.vaadin.utils\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.mobile.vaadin.widgetset\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.organization.permissions\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.utils.js\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.vaaclipse.designer\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.vaadin.designer\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.cubedsl\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.cubedsl.services\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.organizationdsl\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.organizationdsl.api\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.organizationdsl.services\"/>");
-    _builder.newLine();
-    _builder.append("<plugin id=\"net.osbee.xtext.organizationdsl.vaaclipse\"/>");
-    _builder.newLine();
-    return this.prepareSerialized(_builder.toString());
-  }
-  
-  public String prepareSerialized(final String asString) {
-    String _necessaryPlugins = EnumDatabaseVendor.getNecessaryPlugins(this.necessaryDataBaseVendors);
-    String _replace = asString.replace(
-      "${{NECESSARY_DATA_BASE_VENDOR_PLUGINS}}", _necessaryPlugins);
-    String _unnecessaryPlugins = EnumDatabaseVendor.getUnnecessaryPlugins(this.necessaryDataBaseVendors);
-    String _replace_1 = _replace.replace(
-      "${{UNNECESSARY_DATA_BASE_VENDOR_PLUGINS}}", _unnecessaryPlugins);
-    return this.removeDuplicates(_replace_1);
-  }
-}
